commit c064d02cb8b6df175b999071673d2f6b87ba46df Author: kineryy Date: Wed Mar 2 19:36:12 2022 -0500 commit and push the atrocious bullshit diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..6537ca4 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..967315d --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +* text=auto +*.css linguist-vendored +*.scss linguist-vendored +*.js linguist-vendored +CHANGELOG.md export-ignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0ae59f0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +/node_modules +/public/hot +/public/storage +/storage/*.key +/vendor +.env +.env.backup +.phpunit.result.cache +docker-compose.override.yml +Homestead.json +Homestead.yaml +npm-debug.log +yarn-error.log diff --git a/.styleci.yml b/.styleci.yml new file mode 100644 index 0000000..9231873 --- /dev/null +++ b/.styleci.yml @@ -0,0 +1,13 @@ +php: + preset: laravel + disabled: + - no_unused_imports + finder: + not-name: + - index.php + - server.php +js: + finder: + not-name: + - webpack.mix.js +css: true diff --git a/README.md b/README.md new file mode 100644 index 0000000..ceb6ac0 --- /dev/null +++ b/README.md @@ -0,0 +1,62 @@ +

+ +

+Build Status +Total Downloads +Latest Stable Version +License +

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 1500 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +## Laravel Sponsors + +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell). + +### Premium Partners + +- **[Vehikl](https://vehikl.com/)** +- **[Tighten Co.](https://tighten.co)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Cubet Techno Labs](https://cubettech.com)** +- **[Cyber-Duck](https://cyber-duck.co.uk)** +- **[Many](https://www.many.co.uk)** +- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)** +- **[DevSquad](https://devsquad.com)** +- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** +- **[OP.GG](https://op.gg)** + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100644 index 0000000..69914e9 --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,41 @@ +command('inspire')->hourly(); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__.'/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php new file mode 100644 index 0000000..c18c43c --- /dev/null +++ b/app/Exceptions/Handler.php @@ -0,0 +1,41 @@ +reportable(function (Throwable $e) { + // + }); + } +} diff --git a/app/External/CloudflareHelper.php b/app/External/CloudflareHelper.php new file mode 100644 index 0000000..093668e --- /dev/null +++ b/app/External/CloudflareHelper.php @@ -0,0 +1,5 @@ +. +// +// Copyright A Beautiful Site, LLC. +// +// Source: https://github.com/claviska/SimpleImage +// +// Licensed under the MIT license +// + +namespace claviska; + +/** + * A PHP class that makes working with images as simple as possible. + */ +class SimpleImage { + + const + ERR_FILE_NOT_FOUND = 1, + ERR_FONT_FILE = 2, + ERR_FREETYPE_NOT_ENABLED = 3, + ERR_GD_NOT_ENABLED = 4, + ERR_INVALID_COLOR = 5, + ERR_INVALID_DATA_URI = 6, + ERR_INVALID_IMAGE = 7, + ERR_LIB_NOT_LOADED = 8, + ERR_UNSUPPORTED_FORMAT = 9, + ERR_WEBP_NOT_ENABLED = 10, + ERR_WRITE = 11; + + + protected $image; + protected $mimeType; + protected $exif; + + ////////////////////////////////////////////////////////////////////////////////////////////////// + // Magic methods + ////////////////////////////////////////////////////////////////////////////////////////////////// + + /** + * Creates a new SimpleImage object. + * + * @param string $image An image file or a data URI to load. + * @throws \Exception Thrown if the GD library is not found; file|URI or image data is invalid. + */ + public function __construct($image = null) { + // Check for the required GD extension + if(extension_loaded('gd')) { + // Ignore JPEG warnings that cause imagecreatefromjpeg() to fail + ini_set('gd.jpeg_ignore_warning', 1); + } else { + throw new \Exception('Required extension GD is not loaded.', self::ERR_GD_NOT_ENABLED); + } + + // Load an image through the constructor + if(preg_match('/^data:(.*?);/', $image)) { + $this->fromDataUri($image); + } elseif($image) { + $this->fromFile($image); + } + } + + /** + * Destroys the image resource. + */ + public function __destruct() { + //Check for a valid GDimage instance + $type_check = (gettype($this->image) == "object" && get_class($this->image) == "GdImage"); + + if($this->image !== null && is_resource($this->image) && $type_check) { + imagedestroy($this->image); + } + } + + ////////////////////////////////////////////////////////////////////////////////////////////////// + // Loaders + ////////////////////////////////////////////////////////////////////////////////////////////////// + + /** + * Loads an image from a data URI. + * + * @param string $uri A data URI. + * @throws \Exception Thrown if URI or image data is invalid. + * @return \claviska\SimpleImage + */ + public function fromDataUri($uri) { + // Basic formatting check + preg_match('/^data:(.*?);/', $uri, $matches); + if(!count($matches)) { + throw new \Exception('Invalid data URI.', self::ERR_INVALID_DATA_URI); + } + + // Determine mime type + $this->mimeType = $matches[1]; + if(!preg_match('/^image\/(gif|jpeg|png)$/', $this->mimeType)) { + throw new \Exception( + 'Unsupported format: ' . $this->mimeType, + self::ERR_UNSUPPORTED_FORMAT + ); + } + + // Get image data + $uri = base64_decode(preg_replace('/^data:(.*?);base64,/', '', $uri)); + $this->image = imagecreatefromstring($uri); + if(!$this->image) { + throw new \Exception("Invalid image data.", self::ERR_INVALID_IMAGE); + } + + return $this; + } + + /** + * Loads an image from a file. + * + * @param string $file The image file to load. + * @throws \Exception Thrown if file or image data is invalid. + * @return \claviska\SimpleImage + */ + public function fromFile($file) { + // Check if the file exists and is readable. We're using fopen() instead of file_exists() + // because not all URL wrappers support the latter. + $handle = @fopen($file, 'r'); + if($handle === false) { + throw new \Exception("File not found: $file", self::ERR_FILE_NOT_FOUND); + } + fclose($handle); + + // Get image info + $info = @getimagesize($file); + if($info === false) { + throw new \Exception("Invalid image file: $file", self::ERR_INVALID_IMAGE); + } + $this->mimeType = $info['mime']; + + // Create image object from file + switch($this->mimeType) { + case 'image/gif': + // Load the gif + $gif = imagecreatefromgif($file); + if($gif) { + // Copy the gif over to a true color image to preserve its transparency. This is a + // workaround to prevent imagepalettetruecolor() from borking transparency. + $width = imagesx($gif); + $height = imagesy($gif); + $this->image = imagecreatetruecolor($width, $height); + $transparentColor = imagecolorallocatealpha($this->image, 0, 0, 0, 127); + imagecolortransparent($this->image, $transparentColor); + imagefill($this->image, 0, 0, $transparentColor); + imagecopy($this->image, $gif, 0, 0, 0, 0, $width, $height); + imagedestroy($gif); + } + break; + case 'image/jpeg': + $this->image = imagecreatefromjpeg($file); + break; + case 'image/png': + $this->image = imagecreatefrompng($file); + break; + case 'image/webp': + $this->image = imagecreatefromwebp($file); + break; + case 'image/bmp': + case 'image/x-ms-bmp': + case 'image/x-windows-bmp': + $this->image = imagecreatefrombmp($file); + break; + } + if(!$this->image) { + throw new \Exception("Unsupported format: " . $this->mimeType, self::ERR_UNSUPPORTED_FORMAT); + } + + // Convert pallete images to true color images + imagepalettetotruecolor($this->image); + + // Load exif data from JPEG images + if($this->mimeType === 'image/jpeg' && function_exists('exif_read_data')) { + $this->exif = @exif_read_data($file); + } + + return $this; + } + + /** + * Creates a new image. + * + * @param integer $width The width of the image. + * @param integer $height The height of the image. + * @param string|array $color Optional fill color for the new image (default 'transparent'). + * @return \claviska\SimpleImage + */ + public function fromNew($width, $height, $color = 'transparent') { + $this->image = imagecreatetruecolor($width, $height); + + // Use PNG for dynamically created images because it's lossless and supports transparency + $this->mimeType = 'image/png'; + + // Fill the image with color + $this->fill($color); + + return $this; + } + + /** + * Creates a new image from a string. + * + * @param string $string The raw image data as a string. + * @example + * $string = file_get_contents('image.jpg'); + * @return \claviska\SimpleImage + */ + public function fromString($string) { + return $this->fromFile('data://;base64,' . base64_encode($string)); + } + + ////////////////////////////////////////////////////////////////////////////////////////////////// + // Savers + ////////////////////////////////////////////////////////////////////////////////////////////////// + + /** + * Generates an image. + * + * @param string $mimeType The image format to output as a mime type (defaults to the original mime type). + * @param integer $quality Image quality as a percentage (default 100). + * @throws \Exception Thrown when WEBP support is not enabled or unsupported format. + * @return array Returns an array containing the image data and mime type ['data' => '', 'mimeType' => '']. + */ + protected function generate($mimeType = null, $quality = 100) { + // Format defaults to the original mime type + $mimeType = $mimeType ?: $this->mimeType; + + // Ensure quality is a valid integer + if($quality === null) $quality = 100; + $quality = self::keepWithin((int) $quality, 0, 100); + + // Capture output + ob_start(); + + // Generate the image + switch($mimeType) { + + case 'image/gif': + imagesavealpha($this->image, true); + imagegif($this->image, null); + break; + case 'image/jpeg': + imageinterlace($this->image, true); + imagejpeg($this->image, null, $quality); + break; + case 'image/png': + imagesavealpha($this->image, true); + imagepng($this->image); + break; + case 'image/webp': + // Not all versions of PHP will have webp support enabled + if(!function_exists('imagewebp')) { + throw new \Exception( + 'WEBP support is not enabled in your version of PHP.', + self::ERR_WEBP_NOT_ENABLED + ); + } + imagesavealpha($this->image, true); + imagewebp($this->image, null, $quality); + break; + case 'image/bmp': + case 'image/x-ms-bmp': + case 'image/x-windows-bmp': + // Not all versions of PHP support bmp + if(!function_exists('imagebmp')) { + throw new \Exception( + 'BMP support is not available in your version of PHP.', + self::ERR_UNSUPPORTED_FORMAT + ); + } + imageinterlace($this->image, true); + imagebmp($this->image, null, $quality); + break; + default: + throw new \Exception('Unsupported format: ' . $mimeType, self::ERR_UNSUPPORTED_FORMAT); + } + + // Stop capturing + $data = ob_get_contents(); + ob_end_clean(); + + return [ + 'data' => $data, + 'mimeType' => $mimeType + ]; + } + + /** + * Generates a data URI. + * + * @param string $mimeType The image format to output as a mime type (defaults to the original mime type). + * @param integer $quality Image quality as a percentage (default 100). + * @return string Returns a string containing a data URI. + */ + public function toDataUri($mimeType = null, $quality = 100) { + $image = $this->generate($mimeType, $quality); + + return 'data:' . $image['mimeType'] . ';base64,' . base64_encode($image['data']); + } + + /** + * Forces the image to be downloaded to the clients machine. Must be called before any output is sent to the screen. + * + * @param string $filename The filename (without path) to send to the client (e.g. 'image.jpeg'). + * @param string $mimeType The image format to output as a mime type (defaults to the original mime type). + * @param integer $quality Image quality as a percentage (default 100). + * @return \claviska\SimpleImage + */ + public function toDownload($filename, $mimeType = null, $quality = 100) { + $image = $this->generate($mimeType, $quality); + + // Set download headers + header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); + header('Content-Description: File Transfer'); + header('Content-Length: ' . strlen($image['data'])); + header('Content-Transfer-Encoding: Binary'); + header('Content-Type: application/octet-stream'); + header("Content-Disposition: attachment; filename=\"$filename\""); + + echo $image['data']; + + return $this; + } + + /** + * Writes the image to a file. + * + * @param string $file The image format to output as a mime type (defaults to the original mime type). + * @param string $mimeType Image quality as a percentage (default 100). + * @param integer $quality Image quality as a percentage (default 100). + * @throws \Exception Thrown if failed write to file. + * @return \claviska\SimpleImage + */ + public function toFile($file, $mimeType = null, $quality = 100) { + $image = $this->generate($mimeType, $quality); + + // Save the image to file + if(!file_put_contents($file, $image['data'])) { + throw new \Exception("Failed to write image to file: $file", self::ERR_WRITE); + } + + return $this; + } + + /** + * Outputs the image to the screen. Must be called before any output is sent to the screen. + * + * @param string $mimeType The image format to output as a mime type (defaults to the original mime type). + * @param integer $quality Image quality as a percentage (default 100). + * @return \claviska\SimpleImage + */ + public function toScreen($mimeType = null, $quality = 100) { + $image = $this->generate($mimeType, $quality); + + // Output the image to stdout + header('Content-Type: ' . $image['mimeType']); + echo $image['data']; + + return $this; + } + + /** + * Generates an image string. + * + * @param string $mimeType The image format to output as a mime type (defaults to the original mime type). + * @param integer $quality Image quality as a percentage (default 100). + * @return string + */ + public function toString($mimeType = null, $quality = 100) { + return $this->generate($mimeType, $quality)['data']; + } + + ////////////////////////////////////////////////////////////////////////////////////////////////// + // Utilities + ////////////////////////////////////////////////////////////////////////////////////////////////// + + /** + * Ensures a numeric value is always within the min and max range. + * + * @param integer|float $value A numeric value to test. + * @param integer|float $min The minimum allowed value. + * @param integer|float $max The maximum allowed value. + * @return integer|float + */ + protected static function keepWithin($value, $min, $max) { + if($value < $min) return $min; + if($value > $max) return $max; + return $value; + } + + /** + * Gets the image's current aspect ratio. + * + * @return float Returns the aspect ratio as a float. + */ + public function getAspectRatio() { + return $this->getWidth() / $this->getHeight(); + } + + /** + * Gets the image's exif data. + * + * @return array|NULL Returns an array of exif data or null if no data is available. + */ + public function getExif() { + return isset($this->exif) ? $this->exif : null; + } + + /** + * Gets the image's current height. + * + * @return integer + */ + public function getHeight() { + return (int) imagesy($this->image); + } + + /** + * Gets the mime type of the loaded image. + * + * @return string + */ + public function getMimeType() { + return $this->mimeType; + } + + /** + * Gets the image's current orientation. + * + * @return string One of the values: 'landscape', 'portrait', or 'square' + */ + public function getOrientation() { + $width = $this->getWidth(); + $height = $this->getHeight(); + + if($width > $height) return 'landscape'; + if($width < $height) return 'portrait'; + return 'square'; + } + + /** + * Gets the resolution of the image + * + * @return mixed The resolution as an array of integers: [96, 96] + */ + public function getResolution() { + return imageresolution($this->image); + } + + /** + * Gets the image's current width. + * + * @return integer + */ + public function getWidth() { + return (int) imagesx($this->image); + } + + ////////////////////////////////////////////////////////////////////////////////////////////////// + // Manipulation + ////////////////////////////////////////////////////////////////////////////////////////////////// + + /** + * Same as PHP's imagecopymerge, but works with transparent images. Used internally for overlay. + * + * @param resource $dstIm Destination image link resource. + * @param resource $srcIm Source image link resource. + * @param integer $dstX x-coordinate of destination point. + * @param integer $dstY y-coordinate of destination point. + * @param integer $srcX x-coordinate of source point. + * @param integer $srcY y-coordinate of source point. + * @param integer $srcW Source width. + * @param integer $srcH Source height. + * @param integer $pct + * @return boolean true if success. + */ + protected static function imageCopyMergeAlpha($dstIm, $srcIm, $dstX, $dstY, $srcX, $srcY, $srcW, $srcH, $pct) { + // Are we merging with transparency? + if($pct < 100) { + // Disable alpha blending and "colorize" the image using a transparent color + imagealphablending($srcIm, false); + imagefilter($srcIm, IMG_FILTER_COLORIZE, 0, 0, 0, 127 * ((100 - $pct) / 100)); + } + + imagecopy($dstIm, $srcIm, $dstX, $dstY, $srcX, $srcY, $srcW, $srcH); + + return true; + } + + /** + * Rotates an image so the orientation will be correct based on its exif data. It is safe to call + * this method on images that don't have exif data (no changes will be made). + * + * @return \claviska\SimpleImage + */ + public function autoOrient() { + $exif = $this->getExif(); + + if(!$exif || !isset($exif['Orientation'])){ + return $this; + } + + switch($exif['Orientation']) { + case 1: // Do nothing! + break; + case 2: // Flip horizontally + $this->flip('x'); + break; + case 3: // Rotate 180 degrees + $this->rotate(180); + break; + case 4: // Flip vertically + $this->flip('y'); + break; + case 5: // Rotate 90 degrees clockwise and flip vertically + $this->flip('y')->rotate(90); + break; + case 6: // Rotate 90 clockwise + $this->rotate(90); + break; + case 7: // Rotate 90 clockwise and flip horizontally + $this->flip('x')->rotate(90); + break; + case 8: // Rotate 90 counterclockwise + $this->rotate(-90); + break; + } + + return $this; + } + + /** + * Proportionally resize the image to fit inside a specific width and height. + * + * @param integer $maxWidth The maximum width the image can be. + * @param integer $maxHeight The maximum height the image can be. + * @return \claviska\SimpleImage + */ + public function bestFit($maxWidth, $maxHeight) { + // If the image already fits, there's nothing to do + if($this->getWidth() <= $maxWidth && $this->getHeight() <= $maxHeight) { + return $this; + } + + // Calculate max width or height based on orientation + if($this->getOrientation() === 'portrait') { + $height = $maxHeight; + $width = $maxHeight * $this->getAspectRatio(); + } else { + $width = $maxWidth; + $height = $maxWidth / $this->getAspectRatio(); + } + + // Reduce to max width + if($width > $maxWidth) { + $width = $maxWidth; + $height = $width / $this->getAspectRatio(); + } + + // Reduce to max height + if($height > $maxHeight) { + $height = $maxHeight; + $width = $height * $this->getAspectRatio(); + } + + return $this->resize($width, $height); + } + + /** + * Crop the image. + * + * @param integer|float $x1 Top left x coordinate. + * @param integer|float $y1 Top left y coordinate. + * @param integer|float $x2 Bottom right x coordinate. + * @param integer|float $y2 Bottom right x coordinate. + * @return \claviska\SimpleImage + */ + public function crop($x1, $y1, $x2, $y2) { + // Keep crop within image dimensions + $x1 = self::keepWithin($x1, 0, $this->getWidth()); + $x2 = self::keepWithin($x2, 0, $this->getWidth()); + $y1 = self::keepWithin($y1, 0, $this->getHeight()); + $y2 = self::keepWithin($y2, 0, $this->getHeight()); + + // Avoid using native imagecrop() because of a bug with PNG transparency + $dstW = abs($x2 - $x1); + $dstH = abs($y2 - $y1); + $newImage = imagecreatetruecolor($dstW, $dstH); + $transparentColor = imagecolorallocatealpha($newImage, 0, 0, 0, 127); + imagecolortransparent($newImage, $transparentColor); + imagefill($newImage, 0, 0, $transparentColor); + + // Crop it + imagecopyresampled( + $newImage, + $this->image, + 0, 0, min($x1, $x2), min($y1, $y2), + $dstW, + $dstH, + $dstW, + $dstH + ); + + // Swap out the new image + $this->image = $newImage; + + return $this; + } + + /** + * Applies a duotone filter to the image. + * + * @param string|array $lightColor The lightest color in the duotone. + * @param string|array $darkColor The darkest color in the duotone. + * @return \claviska\SimpleImage + */ + function duotone($lightColor, $darkColor) { + $lightColor = self::normalizeColor($lightColor); + $darkColor = self::normalizeColor($darkColor); + + // Calculate averages between light and dark colors + $redAvg = $lightColor['red'] - $darkColor['red']; + $greenAvg = $lightColor['green'] - $darkColor['green']; + $blueAvg = $lightColor['blue'] - $darkColor['blue']; + + // Create a matrix of all possible duotone colors based on gray values + $pixels = []; + for($i = 0; $i <= 255; $i++) { + $grayAvg = $i / 255; + $pixels['red'][$i] = $darkColor['red'] + $grayAvg * $redAvg; + $pixels['green'][$i] = $darkColor['green'] + $grayAvg * $greenAvg; + $pixels['blue'][$i] = $darkColor['blue'] + $grayAvg * $blueAvg; + } + + // Apply the filter pixel by pixel + for($x = 0; $x < $this->getWidth(); $x++) { + for($y = 0; $y < $this->getHeight(); $y++) { + $rgb = $this->getColorAt($x, $y); + $gray = min(255, round(0.299 * $rgb['red'] + 0.114 * $rgb['blue'] + 0.587 * $rgb['green'])); + $this->dot($x, $y, [ + 'red' => $pixels['red'][$gray], + 'green' => $pixels['green'][$gray], + 'blue' => $pixels['blue'][$gray] + ]); + } + } + + return $this; + } + + /** + * Proportionally resize the image to a specific height. + * + * @deprecated + * This method was deprecated in version 3.2.2 and will be removed in version 4.0. + * Please use `resize(null, $height)` instead. + * @param integer $height + * @return \claviska\SimpleImage + */ + public function fitToHeight($height) { + return $this->resize(null, $height); + } + + /** + * Proportionally resize the image to a specific width. + * + * @deprecated + * This method was deprecated in version 3.2.2 and will be removed in version 4.0. + * Please use `resize(null, $height)` instead. + * @param integer $width The width to resize the image to. + * @return \claviska\SimpleImage + */ + public function fitToWidth($width) { + return $this->resize($width, null); + } + + /** + * Flip the image horizontally or vertically. + * + * @param string $direction The direction to flip: x|y|both. + * @return \claviska\SimpleImage + */ + public function flip($direction) { + switch($direction) { + case 'x': + imageflip($this->image, IMG_FLIP_HORIZONTAL); + break; + case 'y': + imageflip($this->image, IMG_FLIP_VERTICAL); + break; + case 'both': + imageflip($this->image, IMG_FLIP_BOTH); + break; + } + + return $this; + } + + /** + * Reduces the image to a maximum number of colors. + * + * @param integer $max The maximum number of colors to use. + * @param boolean $dither Whether or not to use a dithering effect (default true). + * @return \claviska\SimpleImage + */ + public function maxColors($max, $dither = true) { + imagetruecolortopalette($this->image, $dither, max(1, $max)); + + return $this; + } + + /** + * Place an image on top of the current image. + * + * @param string|SimpleImage $overlay The image to overlay. This can be a filename, a data URI, or a SimpleImage object. + * @param string $anchor The anchor point: 'center', 'top', 'bottom', 'left', 'right', 'top left', 'top right', 'bottom left', 'bottom right' (default 'center'). + * @param float $opacity The opacity level of the overlay 0-1 (default 1). + * @param integer $xOffset Horizontal offset in pixels (default 0). + * @param integer $yOffset Vertical offset in pixels (default 0). + * @param bool $calculateOffsetFromEdge Calculate Offset referring to the edges of the image (default false). + * @return \claviska\SimpleImage + */ + public function overlay($overlay, $anchor = 'center', $opacity = 1, $xOffset = 0, $yOffset = 0, $calculateOffsetFromEdge = false) { + // Load overlay image + if(!($overlay instanceof SimpleImage)) $overlay = new SimpleImage($overlay); + + // Convert opacity + $opacity = self::keepWithin($opacity, 0, 1) * 100; + + // Get available space + $spaceX = $this->getWidth() - $overlay->getWidth(); + $spaceY = $this->getHeight() - $overlay->getHeight(); + + // Set default center + $x = ($spaceX / 2) + ($calculateOffsetFromEdge ? 0 : $xOffset); + $y = ($spaceY / 2) + ($calculateOffsetFromEdge ? 0 : $yOffset); + + // Determine if top|bottom + if (strpos($anchor, 'top') !== false) { + $y = $yOffset; + } elseif (strpos($anchor, 'bottom') !== false) { + $y = $spaceY + ($calculateOffsetFromEdge ? -$yOffset : $yOffset); + } + + // Determine if left|right + if (strpos($anchor, 'left') !== false) { + $x = $xOffset; + } elseif (strpos($anchor, 'right') !== false) { + $x = $spaceX + ($calculateOffsetFromEdge ? -$xOffset : $xOffset); + } + + // Perform the overlay + self::imageCopyMergeAlpha( + $this->image, + $overlay->image, + $x, $y, + 0, 0, + $overlay->getWidth(), + $overlay->getHeight(), + $opacity + ); + + return $this; + } + + /** + * Resize an image to the specified dimensions. If only one dimension is specified, the image will be resized proportionally. + * + * @param integer $width The new image width. + * @param integer $height The new image height. + * @return \claviska\SimpleImage + */ + public function resize($width = null, $height = null) { + // No dimentions specified + if(!$width && !$height) { + return $this; + } + + // Resize to width + if($width && !$height) { + $height = $width / $this->getAspectRatio(); + } + + // Resize to height + if(!$width && $height) { + $width = $height * $this->getAspectRatio(); + } + + // If the dimensions are the same, there's no need to resize + if($this->getWidth() === $width && $this->getHeight() === $height) { + return $this; + } + + // We can't use imagescale because it doesn't seem to preserve transparency properly. The + // workaround is to create a new truecolor image, allocate a transparent color, and copy the + // image over to it using imagecopyresampled. + $newImage = imagecreatetruecolor($width, $height); + $transparentColor = imagecolorallocatealpha($newImage, 0, 0, 0, 127); + imagecolortransparent($newImage, $transparentColor); + imagefill($newImage, 0, 0, $transparentColor); + imagecopyresampled( + $newImage, + $this->image, + 0, 0, 0, 0, + $width, + $height, + $this->getWidth(), + $this->getHeight() + ); + + // Swap out the new image + $this->image = $newImage; + + return $this; + } + + /** + * Sets an image's resolution, as per https://www.php.net/manual/en/function.imageresolution.php + * + * @param integer $res_x The horizontal resolution in DPI. + * @param integer $res_y The vertical resolution in DPI + * @return \claviska\SimpleImage + */ + public function resolution($res_x, $res_y = null) { + if(is_null($res_y)) { + imageresolution($this->image, $res_x); + } else { + imageresolution($this->image, $res_x, $res_y); + } + + return $this; + } + + /** + * Rotates the image. + * + * @param integer $angle The angle of rotation (-360 - 360). + * @param string|array $backgroundColor The background color to use for the uncovered zone area after rotation (default 'transparent'). + * @return \claviska\SimpleImage + */ + public function rotate($angle, $backgroundColor = 'transparent') { + // Rotate the image on a canvas with the desired background color + $backgroundColor = $this->allocateColor($backgroundColor); + + $this->image = imagerotate( + $this->image, + -(self::keepWithin($angle, -360, 360)), + $backgroundColor + ); + imagecolortransparent($this->image, imagecolorallocatealpha($this->image, 0, 0, 0, 127)); + + return $this; + } + + /** + * Adds text to the image. + * + * @param string $text The desired text. + * @param array $options + * An array of options. + * - fontFile* (string) - The TrueType (or compatible) font file to use. + * - size (integer) - The size of the font in pixels (default 12). + * - color (string|array) - The text color (default black). + * - anchor (string) - The anchor point: 'center', 'top', 'bottom', 'left', 'right', 'top left', 'top right', 'bottom left', 'bottom right' (default 'center'). + * - xOffset (integer) - The horizontal offset in pixels (default 0). + * - yOffset (integer) - The vertical offset in pixels (default 0). + * - shadow (array) - Text shadow params. + * - x* (integer) - Horizontal offset in pixels. + * - y* (integer) - Vertical offset in pixels. + * - color* (string|array) - The text shadow color. + * - $calculateOffsetFromEdge (bool) - Calculate offsets from the edge of the image (default false). + * - $baselineAlign (bool) - Align the text font with the baseline. (default true). + * @param array $boundary + * If passed, this variable will contain an array with coordinates that surround the text: [x1, y1, x2, y2, width, height]. + * This can be used for calculating the text's position after it gets added to the image. + * @throws \Exception + * @return \claviska\SimpleImage + */ + public function text($text, $options, &$boundary = null) { + // Check for freetype support + if(!function_exists('imagettftext')) { + throw new \Exception( + 'Freetype support is not enabled in your version of PHP.', + self::ERR_FREETYPE_NOT_ENABLED + ); + } + + // Default options + $options = array_merge([ + 'fontFile' => null, + 'size' => 12, + 'color' => 'black', + 'anchor' => 'center', + 'xOffset' => 0, + 'yOffset' => 0, + 'shadow' => null, + 'calculateOffsetFromEdge' => false, + 'baselineAlign' => true + ], $options); + + // Extract and normalize options + $fontFile = $options['fontFile']; + $size = ($options['size'] / 96) * 72; // Convert px to pt (72pt per inch, 96px per inch) + $color = $this->allocateColor($options['color']); + $anchor = $options['anchor']; + $xOffset = $options['xOffset']; + $yOffset = $options['yOffset']; + $calculateOffsetFromEdge = $options['calculateOffsetFromEdge']; + $baselineAlign = $options['baselineAlign']; + $angle = 0; + + // Calculate the bounding box dimensions + // + // Since imagettfbox() returns a bounding box from the text's baseline, we can end up with + // different heights for different strings of the same font size. For example, 'type' will often + // be taller than 'text' because the former has a descending letter. + // + // To compensate for this, we created a temporary bounding box to measure the maximum height + // that the font used can occupy. Based on this, we can adjust the text vertically so that it + // appears inside the box with a good consistency. + // + // See: https://github.com/claviska/SimpleImage/issues/165 + // + + $boxText = imagettfbbox($size, $angle, $fontFile, $text); + if(!$boxText) throw new \Exception("Unable to load font file: $fontFile", self::ERR_FONT_FILE); + + $boxWidth = abs($boxText[4] - $boxText[0]); + $boxHeight = abs($boxText[5] - $boxText[1]); + + // Calculate Offset referring to the edges of the image. + // Just invert the value for bottom|right; + if ($calculateOffsetFromEdge == true) { + if (strpos($anchor, 'bottom') !== false) $yOffset *= -1; + if (strpos($anchor, 'right') !== false) $xOffset *= -1; + } + + // Align the text font with the baseline. + // I use $yOffset to inject the vertical alignment correction value. + if ($baselineAlign == true) { + // Create a temporary box to obtain the maximum height that this font can use. + $boxFull = imagettfbbox($size, $angle, $fontFile, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'); + // Based on the maximum height, the text is aligned. + if (strpos($anchor, 'bottom') !== false) { + $yOffset -= $boxFull[1]; + } elseif (strpos($anchor, 'top') !== false) { + $yOffset += abs($boxFull[5]) - $boxHeight; + } else { // center + $boxFullHeight = abs($boxFull[1]) + abs($boxFull[5]); + $yOffset += ($boxFullHeight/2) - ($boxHeight/2) - abs($boxFull[1]); + } + + } else { + // Prevents fonts rendered outside the box boundary from being cut. + // Example: 'Scriptina' font, some letters invade the space of the previous or subsequent letter. + $yOffset -= $boxText[1]; + } + + // Prevents fonts rendered outside the box boundary from being cut. + // Example: 'Scriptina' font, some letters invade the space of the previous or subsequent letter. + $xOffset -= $boxText[0]; + + // Determine position + switch($anchor) { + case 'top left': + $x = $xOffset; + $y = $yOffset + $boxHeight; + break; + case 'top right': + $x = $this->getWidth() - $boxWidth + $xOffset; + $y = $yOffset + $boxHeight; + break; + case 'top': + $x = ($this->getWidth() / 2) - ($boxWidth / 2) + $xOffset; + $y = $yOffset + $boxHeight; + break; + case 'bottom left': + $x = $xOffset; + $y = $this->getHeight() + $yOffset ; + break; + case 'bottom right': + $x = $this->getWidth() - $boxWidth + $xOffset; + $y = $this->getHeight() + $yOffset; + break; + case 'bottom': + $x = ($this->getWidth() / 2) - ($boxWidth / 2) + $xOffset; + $y = $this->getHeight() + $yOffset; + break; + case 'left': + $x = $xOffset; + $y = ($this->getHeight() / 2) - (($boxHeight / 2) - $boxHeight) + $yOffset; + break; + case 'right'; + $x = $this->getWidth() - $boxWidth + $xOffset; + $y = ($this->getHeight() / 2) - (($boxHeight / 2) - $boxHeight) + $yOffset; + break; + default: // center + $x = ($this->getWidth() / 2) - ($boxWidth / 2) + $xOffset; + $y = ($this->getHeight() / 2) - (($boxHeight / 2) - $boxHeight) + $yOffset; + break; + } + $x = (int) round($x); + $y = (int) round($y); + + // Pass the boundary back by reference + $boundary = [ + 'x1' => $x + $boxText[0], + 'y1' => $y + $boxText[1] - $boxHeight, // $y is the baseline, not the top! + 'x2' => $x + $boxWidth + $boxText[0], + 'y2' => $y + $boxText[1], + 'width' => $boxWidth, + 'height' => $boxHeight + ]; + + // Text shadow + if(is_array($options['shadow'])) { + imagettftext( + $this->image, + $size, + $angle, + $x + $options['shadow']['x'], + $y + $options['shadow']['y'], + $this->allocateColor($options['shadow']['color']), + $fontFile, + $text + ); + } + + // Draw the text + imagettftext($this->image, $size, $angle, $x, $y, $color, $fontFile, $text); + + return $this; + } + + /** + * Adds text with a line break to the image. + * + * @param string $text The desired text. + * @param array $options + * An array of options. + * - fontFile* (string) - The TrueType (or compatible) font file to use. + * - size (integer) - The size of the font in pixels (default 12). + * - color (string|array) - The text color (default black). + * - anchor (string) - The anchor point: 'center', 'top', 'bottom', 'left', 'right', 'top left', 'top right', 'bottom left', 'bottom right' (default 'center'). + * - xOffset (integer) - The horizontal offset in pixels (default 0). Has no effect when anchor is 'center'. + * - yOffset (integer) - The vertical offset in pixels (default 0). Has no effect when anchor is 'center'. + * - shadow (array) - Text shadow params. + * - x* (integer) - Horizontal offset in pixels. + * - y* (integer) - Vertical offset in pixels. + * - color* (string|array) - The text shadow color. + * - $calculateOffsetFromEdge (bool) - Calculate offsets from the edge of the image (default false). + * - width (int) - Width of text box (default image width). + * - align (string) - How to align text: 'left', 'right', 'center', 'justify' (default 'left'). + * - leading (float) - Increase/decrease spacing between lines of text (default 0). + * - opacity (float) - The opacity level of the text 0-1 (default 1). + * @throws \Exception + * @return \claviska\SimpleImage + */ + public function textBox($text, $options) { + // default width of image + $maxWidth = $this->getWidth(); + // Default options + $options = array_merge([ + 'fontFile' => null, + 'size' => 12, + 'color' => 'black', + 'anchor' => 'center', + 'xOffset' => 0, + 'yOffset' => 0, + 'shadow' => null, + 'calculateOffsetFromEdge' => false, + 'width' => $maxWidth, + 'align' => 'left', + 'leading' => 0, + 'opacity' => 1 + ], $options); + + // Extract and normalize options + $fontFile = $options['fontFile']; + $fontSize = $fontSizePx = $options['size']; + $fontSize = ($fontSize / 96) * 72; // Convert px to pt (72pt per inch, 96px per inch) + $color = $options['color']; + $anchor = $options['anchor']; + $xOffset = $options['xOffset']; + $yOffset = $options['yOffset']; + $shadow = $options['shadow']; + $calculateOffsetFromEdge = $options['calculateOffsetFromEdge']; + $angle = 0; + $maxWidth = $options['width']; + $leading = $options['leading']; + $leading = self::keepWithin($leading, ($fontSizePx * -1), $leading); + $opacity = $options['opacity']; + + $align = $options['align']; + if ($align == 'right') { + $align = 'top right'; + } elseif ($align == 'center') { + $align = 'top'; + } elseif ($align == 'justify') { + $align = 'justify'; + } else { + $align = 'top left'; + } + + list($lines, $isLastLine, $lastLineHeight) = self::textSeparateLines($text, $fontFile, $fontSize, $maxWidth); + + $maxHeight = (count($lines) - 1) * ($fontSizePx * 1.2 + $leading) + $lastLineHeight; + + $imageText = new SimpleImage(); + $imageText->fromNew($maxWidth, $maxHeight); + + // Align left/center/right + if ($align <> 'justify') { + foreach ($lines as $key => $line) { + if( $align == 'top' ) $line = trim($line); // If is justify = 'center' + $imageText->text($line, array( + 'fontFile' => $fontFile, + 'size' => $fontSizePx, + 'color' => $color, + 'anchor' => $align, + 'xOffset' => 0, + 'yOffset' => $key * ($fontSizePx * 1.2 + $leading), + 'shadow' => $shadow, + 'calculateOffsetFromEdge' => true + )); + } + + // Justify + } else { + foreach ($lines as $keyLine => $line) { + // Check if there are spaces at the beginning of the sentence + $spaces = 0; + if (preg_match("/^\s+/", $line, $match)) { + // Count spaces + $spaces = strlen($match[0]); + $line = ltrim($line); + } + + // Separate words + $words = preg_split("/\s+/", $line); + // Include spaces with the first word + $words[0] = str_repeat(' ', $spaces) . $words[0]; + + // Calculates the space occupied by all words + $wordsSize = array(); + foreach ($words as $key => $word) { + $wordBox = imagettfbbox($fontSize, 0, $fontFile, $word); + $wordWidth = abs($wordBox[4] - $wordBox[0]); + $wordsSize[$key] = $wordWidth; + } + $wordsSizeTotal = array_sum($wordsSize); + + // Calculates the required space between words + $countWords = count($words); + $wordSpacing = 0; + if ($countWords > 1) { + $wordSpacing = ($maxWidth - $wordsSizeTotal) / ($countWords - 1); + $wordSpacing = round($wordSpacing, 3); + } + + $xOffsetJustify = 0; + foreach ($words as $key => $word) { + if ($isLastLine[$keyLine] == true) { + if ($key < (count($words) - 1)) continue; + $word = $line; + } + $imageText->text($word, array( + 'fontFile' => $fontFile, + 'size' => $fontSizePx, + 'color' => $color, + 'anchor' => 'top left', + 'xOffset' => $xOffsetJustify, + 'yOffset' => $keyLine * ($fontSizePx * 1.2 + $leading), + 'shadow' => $shadow, + 'calculateOffsetFromEdge' => true, + ) + ); + // Calculate offset for next word + $xOffsetJustify += $wordsSize[$key] + $wordSpacing; + } + } + } + + $this->overlay($imageText, $anchor, $opacity, $xOffset, $yOffset, $calculateOffsetFromEdge); + + return $this; + } + + /** + * Receives a text and breaks into LINES. + * + * @param integer $text + * @param string $fontFile + * @param int $fontSize + * @param int $maxWidth + * @return array + */ + private function textSeparateLines($text, $fontFile, $fontSize, $maxWidth) { + $words = self::textSeparateWords($text); + $countWords = count($words) - 1; + $lines[0] = ''; + $lineKey = 0; + $isLastLine = []; + for ($i = 0; $i < $countWords; $i++) { + $word = $words[$i]; + $isLastLine[$lineKey] = false; + if ($word === PHP_EOL) { + $isLastLine[$lineKey] = true; + $lineKey++; + $lines[$lineKey] = ''; + continue; + } + $lineBox = imagettfbbox($fontSize, 0, $fontFile, $lines[$lineKey] . $word); + if (abs($lineBox[4] - $lineBox[0]) < $maxWidth) { + $lines[$lineKey] .= $word . ' '; + } else { + $lineKey++; + $lines[$lineKey] = $word . ' '; + } + } + $isLastLine[$lineKey] = true; + // Exclude space of right + $lines = array_map('rtrim', $lines); + // Calculate height of last line + $boxFull = imagettfbbox($fontSize, 0, $fontFile, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'); + $lineBox = imagettfbbox($fontSize, 0, $fontFile, $lines[$lineKey]); + // Height of last line = ascender of $boxFull + descender of $lineBox + $lastLineHeight = abs($lineBox[1]) + abs($boxFull[5]); + + return array($lines, $isLastLine, $lastLineHeight); + } + + /** + * Receives a text and breaks into WORD / SPACE / NEW LINE. + * + * @param integer $text + * @return array + */ + private function textSeparateWords($text) { + // Normalizes line break + $text = preg_replace('/(\r\n|\n|\r)/', PHP_EOL, $text); + $text = explode(PHP_EOL, $text); + $newText = array(); + foreach ($text as $key => $line) { + $newText = array_merge($newText, explode(' ', $line), [PHP_EOL]); + } + + return $newText; + } + + /** + * Creates a thumbnail image. This function attempts to get the image as close to the provided + * dimensions as possible, then crops the remaining overflow to force the desired size. Useful + * for generating thumbnail images. + * + * @param integer $width The thumbnail width. + * @param integer $height The thumbnail height. + * @param string $anchor The anchor point: 'center', 'top', 'bottom', 'left', 'right', 'top left', 'top right', 'bottom left', 'bottom right' (default 'center'). + * @return \claviska\SimpleImage + */ + public function thumbnail($width, $height, $anchor = 'center') { + // Determine aspect ratios + $currentRatio = $this->getHeight() / $this->getWidth(); + $targetRatio = $height / $width; + + // Fit to height/width + if($targetRatio > $currentRatio) { + $this->resize(null, $height); + } else { + $this->resize($width, null); + } + + switch($anchor) { + case 'top': + $x1 = floor(($this->getWidth() / 2) - ($width / 2)); + $x2 = $width + $x1; + $y1 = 0; + $y2 = $height; + break; + case 'bottom': + $x1 = floor(($this->getWidth() / 2) - ($width / 2)); + $x2 = $width + $x1; + $y1 = $this->getHeight() - $height; + $y2 = $this->getHeight(); + break; + case 'left': + $x1 = 0; + $x2 = $width; + $y1 = floor(($this->getHeight() / 2) - ($height / 2)); + $y2 = $height + $y1; + break; + case 'right': + $x1 = $this->getWidth() - $width; + $x2 = $this->getWidth(); + $y1 = floor(($this->getHeight() / 2) - ($height / 2)); + $y2 = $height + $y1; + break; + case 'top left': + $x1 = 0; + $x2 = $width; + $y1 = 0; + $y2 = $height; + break; + case 'top right': + $x1 = $this->getWidth() - $width; + $x2 = $this->getWidth(); + $y1 = 0; + $y2 = $height; + break; + case 'bottom left': + $x1 = 0; + $x2 = $width; + $y1 = $this->getHeight() - $height; + $y2 = $this->getHeight(); + break; + case 'bottom right': + $x1 = $this->getWidth() - $width; + $x2 = $this->getWidth(); + $y1 = $this->getHeight() - $height; + $y2 = $this->getHeight(); + break; + default: + $x1 = floor(($this->getWidth() / 2) - ($width / 2)); + $x2 = $width + $x1; + $y1 = floor(($this->getHeight() / 2) - ($height / 2)); + $y2 = $height + $y1; + break; + } + + // Return the cropped thumbnail image + return $this->crop($x1, $y1, $x2, $y2); + } + + ////////////////////////////////////////////////////////////////////////////////////////////////// + // Drawing + ////////////////////////////////////////////////////////////////////////////////////////////////// + + /** + * Draws an arc. + * + * @param integer $x The x coordinate of the arc's center. + * @param integer $y The y coordinate of the arc's center. + * @param integer $width The width of the arc. + * @param integer $height The height of the arc. + * @param integer $start The start of the arc in degrees. + * @param integer $end The end of the arc in degrees. + * @param string|array $color The arc color. + * @param integer|string $thickness Line thickness in pixels or 'filled' (default 1). + * @return \claviska\SimpleImage + */ + public function arc($x, $y, $width, $height, $start, $end, $color, $thickness = 1) { + // Allocate the color + $tempColor = $this->allocateColor($color); + imagesetthickness($this->image, 1); + + // Draw an arc + if($thickness === 'filled') { + imagefilledarc($this->image, $x, $y, $width, $height, $start, $end, $tempColor, IMG_ARC_PIE); + + } else if ($thickness === 1) { + imagearc($this->image, $x, $y, $width, $height, $start, $end, $tempColor); + + } else { + // New temp image + $tempImage = new SimpleImage(); + $tempImage->fromNew($this->getWidth(), $this->getHeight(), 'transparent'); + + // Draw a large ellipse filled with $color (+$thickness pixels) + $tempColor = $tempImage->allocateColor($color); + imagefilledarc($tempImage->image, $x, $y, $width+$thickness, $height+$thickness, $start, $end, $tempColor, IMG_ARC_PIE); + + // Draw a smaller ellipse filled with red|blue (-$thickness pixels) + $tempColor = (self::normalizeColor($color)['red'] == 255) ? 'blue' : 'red'; + $tempColor = $tempImage->allocateColor($tempColor); + imagefilledarc($tempImage->image, $x, $y, $width-$thickness, $height-$thickness, $start, $end, $tempColor, IMG_ARC_PIE); + + // Replace the color of the smaller ellipse with 'transparent' + $tempImage->excludeInsideColor($x, $y, $color); + + // Apply the temp image + $this->overlay($tempImage); + } + + return $this; + } + + /** + * Draws a border around the image. + * + * @param string|array $color The border color. + * @param integer $thickness The thickness of the border (default 1). + * @return \claviska\SimpleImage + */ + public function border($color, $thickness = 1) { + $x1 = -1; + $y1 = 0; + $x2 = $this->getWidth(); + $y2 = $this->getHeight()-1; + + $color = $this->allocateColor($color); + imagesetthickness($this->image, $thickness*2); + imagerectangle($this->image, $x1, $y1, $x2, $y2, $color); + + return $this; + } + + /** + * Draws a single pixel dot. + * + * @param integer $x The x coordinate of the dot. + * @param integer $y The y coordinate of the dot. + * @param string|array $color The dot color. + * @return \claviska\SimpleImage + */ + public function dot($x, $y, $color) { + $color = $this->allocateColor($color); + imagesetpixel($this->image, $x, $y, $color); + + return $this; + } + + /** + * Draws an ellipse. + * + * @param integer $x The x coordinate of the center. + * @param integer $y The y coordinate of the center. + * @param integer $width The ellipse width. + * @param integer $height The ellipse height. + * @param string|array $color The ellipse color. + * @param integer|array $thickness Line thickness in pixels or 'filled' (default 1). + * @return \claviska\SimpleImage + */ + public function ellipse($x, $y, $width, $height, $color, $thickness = 1) { + // Allocate the color + $tempColor = $this->allocateColor($color); + imagesetthickness($this->image, 1); + + // Draw an ellipse + if($thickness === 'filled') { + imagefilledellipse($this->image, $x, $y, $width, $height, $tempColor); + + } else if ($thickness === 1) { + imageellipse($this->image, $x, $y, $width, $height, $tempColor); + + } else { + // New temp image + $tempImage = new SimpleImage(); + $tempImage->fromNew($this->getWidth(), $this->getHeight(), 'transparent'); + + // Draw a large ellipse filled with $color (+$thickness pixels) + $tempColor = $tempImage->allocateColor($color); + imagefilledellipse($tempImage->image, $x, $y, $width+$thickness, $height+$thickness, $tempColor); + + // Draw a smaller ellipse filled with red|blue (-$thickness pixels) + $tempColor = (self::normalizeColor($color)['red'] == 255) ? 'blue' : 'red'; + $tempColor = $tempImage->allocateColor($tempColor); + imagefilledellipse($tempImage->image, $x, $y, $width-$thickness, $height-$thickness, $tempColor); + + // Replace the color of the smaller ellipse with 'transparent' + $tempImage->excludeInsideColor($x, $y, $color); + + // Apply the temp image + $this->overlay($tempImage); + } + + return $this; + } + + /** + * Fills the image with a solid color. + * + * @param string|array $color The fill color. + * @return \claviska\SimpleImage + */ + public function fill($color) { + // Draw a filled rectangle over the entire image + $this->rectangle(0, 0, $this->getWidth(), $this->getHeight(), 'white', 'filled'); + + // Now flood it with the appropriate color + $color = $this->allocateColor($color); + imagefill($this->image, 0, 0, $color); + + return $this; + } + + /** + * Draws a line. + * + * @param integer $x1 The x coordinate for the first point. + * @param integer $y1 The y coordinate for the first point. + * @param integer $x2 The x coordinate for the second point. + * @param integer $y2 The y coordinate for the second point. + * @param string|array $color The line color. + * @param integer $thickness The line thickness (default 1). + * @return \claviska\SimpleImage + */ + public function line($x1, $y1, $x2, $y2, $color, $thickness = 1) { + // Allocate the color + $color = $this->allocateColor($color); + + // Draw a line + imagesetthickness($this->image, $thickness); + imageline($this->image, $x1, $y1, $x2, $y2, $color); + + return $this; + } + + /** + * Draws a polygon. + * + * @param array $vertices + * The polygon's vertices in an array of x/y arrays. + * Example: + * [ + * ['x' => x1, 'y' => y1], + * ['x' => x2, 'y' => y2], + * ['x' => xN, 'y' => yN] + * ] + * @param string|array $color The polygon color. + * @param integer|array $thickness Line thickness in pixels or 'filled' (default 1). + * @return \claviska\SimpleImage + */ + public function polygon($vertices, $color, $thickness = 1) { + // Allocate the color + $color = $this->allocateColor($color); + + // Convert [['x' => x1, 'y' => x1], ['x' => x1, 'y' => y2], ...] to [x1, y1, x2, y2, ...] + $points = []; + foreach($vertices as $vals) { + $points[] = $vals['x']; + $points[] = $vals['y']; + } + + // Draw a polygon + if($thickness === 'filled') { + imagesetthickness($this->image, 1); + imagefilledpolygon($this->image, $points, count($vertices), $color); + } else { + imagesetthickness($this->image, $thickness); + imagepolygon($this->image, $points, count($vertices), $color); + } + + return $this; + } + + /** + * Draws a rectangle. + * + * @param integer $x1 The upper left x coordinate. + * @param integer $y1 The upper left y coordinate. + * @param integer $x2 The bottom right x coordinate. + * @param integer $y2 The bottom right y coordinate. + * @param string|array $color The rectangle color. + * @param integer|array $thickness Line thickness in pixels or 'filled' (default 1). + * @return \claviska\SimpleImage + */ + public function rectangle($x1, $y1, $x2, $y2, $color, $thickness = 1) { + // Allocate the color + $color = $this->allocateColor($color); + + // Draw a rectangle + if($thickness === 'filled') { + imagesetthickness($this->image, 1); + imagefilledrectangle($this->image, $x1, $y1, $x2, $y2, $color); + } else { + imagesetthickness($this->image, $thickness); + imagerectangle($this->image, $x1, $y1, $x2, $y2, $color); + } + + return $this; + } + + /** + * Draws a rounded rectangle. + * + * @param integer $x1 The upper left x coordinate. + * @param integer $y1 The upper left y coordinate. + * @param integer $x2 The bottom right x coordinate. + * @param integer $y2 The bottom right y coordinate. + * @param integer $radius The border radius in pixels. + * @param string|array $color The rectangle color. + * @param integer|array $thickness Line thickness in pixels or 'filled' (default 1). + * @return \claviska\SimpleImage + */ + public function roundedRectangle($x1, $y1, $x2, $y2, $radius, $color, $thickness = 1) { + if($thickness === 'filled') { + // Draw the filled rectangle without edges + $this->rectangle($x1 + $radius + 1, $y1, $x2 - $radius - 1, $y2, $color, 'filled'); + $this->rectangle($x1, $y1 + $radius + 1, $x1 + $radius, $y2 - $radius - 1, $color, 'filled'); + $this->rectangle($x2 - $radius, $y1 + $radius + 1, $x2, $y2 - $radius - 1, $color, 'filled'); + + // Fill in the edges with arcs + $this->arc($x1 + $radius, $y1 + $radius, $radius * 2, $radius * 2, 180, 270, $color, 'filled'); + $this->arc($x2 - $radius, $y1 + $radius, $radius * 2, $radius * 2, 270, 360, $color, 'filled'); + $this->arc($x1 + $radius, $y2 - $radius, $radius * 2, $radius * 2, 90, 180, $color, 'filled'); + $this->arc($x2 - $radius, $y2 - $radius, $radius * 2, $radius * 2, 360, 90, $color, 'filled'); + } else { + $offset = $thickness / 2; + $x1 -= $offset; + $x2 += $offset; + $y1 -= $offset; + $y2 += $offset; + $radius = self::keepWithin($radius, 0, min(($x2 - $x1) / 2, ($y2 - $y1) / 2 ) - 1); + $radius = floor($radius); + $thickness = self::keepWithin($thickness, 1, min(($x2 - $x1) / 2, ($y2 - $y1) / 2)); + + // New temp image + $tempImage = new SimpleImage(); + $tempImage->fromNew($this->getWidth(), $this->getHeight(), 'transparent'); + + // Draw a large rectangle filled with $color + $tempImage->roundedRectangle($x1, $y1, $x2, $y2, $radius, $color,'filled'); + + // Draw a smaller rectangle filled with red|blue (-$thickness pixels on each side) + $tempColor = (self::normalizeColor($color)['red'] == 255) ? 'blue' : 'red'; + $radius = $radius - $thickness; + $radius = self::keepWithin($radius, 0, $radius); + $tempImage->roundedRectangle( + $x1 + $thickness, + $y1 + $thickness, + $x2 - $thickness, + $y2 - $thickness, + $radius, + $tempColor, + 'filled' + ); + + // Replace the color of the smaller rectangle with 'transparent' + $tempImage->excludeInsideColor(($x2 + $x1) / 2, ($y2 + $y1) / 2, $color); + + // Apply the temp image + $this->overlay($tempImage); + } + + return $this; + } + + /** + * Exclude inside color. + * Used for roundedRectangle(), ellipse() and arc() + * + * @param number $x certer x of rectangle. + * @param number $y certer y of rectangle. + * @param string|array $borderColor The color of border. + */ + private function excludeInsideColor($x, $y, $borderColor) { + $borderColor = $this->allocateColor($borderColor); + $transparent = $this->allocateColor('transparent'); + imagefilltoborder($this->image, $x, $y, $borderColor, $transparent); + return $this; + } + + ////////////////////////////////////////////////////////////////////////////////////////////////// + // Filters + ////////////////////////////////////////////////////////////////////////////////////////////////// + + /** + * Applies the blur filter. + * + * @param string $type The blur algorithm to use: 'selective', 'gaussian' (default 'gaussian'). + * @param number $passes The number of time to apply the filter, enhancing the effect (default 1). + * @return \claviska\SimpleImage + */ + public function blur($type = 'selective', $passes = 1) { + $filter = $type === 'gaussian' ? IMG_FILTER_GAUSSIAN_BLUR : IMG_FILTER_SELECTIVE_BLUR; + + for($i = 0; $i < $passes; $i++) { + imagefilter($this->image, $filter); + } + + return $this; + } + + /** + * Applies the brightness filter to brighten the image. + * + * @param integer $percentage Percentage to brighten the image (0 - 100). + * @return \claviska\SimpleImage + */ + public function brighten($percentage) { + $percentage = self::keepWithin(255 * $percentage / 100, 0, 255); + + imagefilter($this->image, IMG_FILTER_BRIGHTNESS, $percentage); + + return $this; + } + + /** + * Applies the colorize filter. + * + * @param string|array $color The filter color. + * @return \claviska\SimpleImage + */ + public function colorize($color) { + $color = self::normalizeColor($color); + + imagefilter( + $this->image, + IMG_FILTER_COLORIZE, + $color['red'], + $color['green'], + $color['blue'], + 127 - ($color['alpha'] * 127) + ); + + return $this; + } + + /** + * Applies the contrast filter. + * + * @param integer $percentage Percentage to adjust (-100 - 100). + * @return \claviska\SimpleImage + */ + public function contrast($percentage) { + imagefilter($this->image, IMG_FILTER_CONTRAST, self::keepWithin($percentage, -100, 100)); + + return $this; + } + + /** + * Applies the brightness filter to darken the image. + * + * @param integer $percentage Percentage to darken the image (0 - 100). + * @return \claviska\SimpleImage + */ + public function darken($percentage) { + $percentage = self::keepWithin(255 * $percentage / 100, 0, 255); + + imagefilter($this->image, IMG_FILTER_BRIGHTNESS, -$percentage); + + return $this; + } + + /** + * Applies the desaturate (grayscale) filter. + * + * @return \claviska\SimpleImage + */ + public function desaturate() { + imagefilter($this->image, IMG_FILTER_GRAYSCALE); + + return $this; + } + + /** + * Applies the edge detect filter. + * + * @return \claviska\SimpleImage + */ + public function edgeDetect() { + imagefilter($this->image, IMG_FILTER_EDGEDETECT); + + return $this; + } + + /** + * Applies the emboss filter. + * + * @return \claviska\SimpleImage + */ + public function emboss() { + imagefilter($this->image, IMG_FILTER_EMBOSS); + + return $this; + } + + /** + * Inverts the image's colors. + * + * @return \claviska\SimpleImage + */ + public function invert() { + imagefilter($this->image, IMG_FILTER_NEGATE); + + return $this; + } + + /** + * Changes the image's opacity level. + * + * @param float $opacity The desired opacity level (0 - 1). + * @return \claviska\SimpleImage + */ + public function opacity($opacity) { + // Create a transparent image + $newImage = new SimpleImage(); + $newImage->fromNew($this->getWidth(), $this->getHeight()); + + // Copy the current image (with opacity) onto the transparent image + self::imageCopyMergeAlpha( + $newImage->image, + $this->image, + 0, 0, + 0, 0, + $this->getWidth(), + $this->getHeight(), + self::keepWithin($opacity, 0, 1) * 100 + ); + + return $this; + } + + /** + * Applies the pixelate filter. + * + * @param integer $size The size of the blocks in pixels (default 10). + * @return \claviska\SimpleImage + */ + public function pixelate($size = 10) { + imagefilter($this->image, IMG_FILTER_PIXELATE, $size, true); + + return $this; + } + + /** + * Simulates a sepia effect by desaturating the image and applying a sepia tone. + * + * @return \claviska\SimpleImage + */ + public function sepia() { + imagefilter($this->image, IMG_FILTER_GRAYSCALE); + imagefilter($this->image, IMG_FILTER_COLORIZE, 70, 35, 0); + + return $this; + } + + /** + * Sharpens the image. + * + * @param integer $amount Sharpening amount (default 50). + * @return \claviska\SimpleImage + */ + public function sharpen($amount = 50) { + // Normalize amount + $amount = max(1, min(100, $amount)) / 100; + + $sharpen = [ + [-1, -1, -1], + [-1, 8 / $amount, -1], + [-1, -1, -1], + ]; + $divisor = array_sum(array_map('array_sum', $sharpen)); + + imageconvolution($this->image, $sharpen, $divisor, 0); + + return $this; + } + + /** + * Applies the mean remove filter to produce a sketch effect. + * + * @return \claviska\SimpleImage + */ + public function sketch() { + imagefilter($this->image, IMG_FILTER_MEAN_REMOVAL); + + return $this; + } + + ////////////////////////////////////////////////////////////////////////////////////////////////// + // Color utilities + ////////////////////////////////////////////////////////////////////////////////////////////////// + + /** + * Converts a "friendly color" into a color identifier for use with GD's image functions. + * + * @param string|array $color The color to allocate. + * @return integer + */ + protected function allocateColor($color) { + $color = self::normalizeColor($color); + + // Was this color already allocated? + $index = imagecolorexactalpha( + $this->image, + $color['red'], + $color['green'], + $color['blue'], + 127 - ($color['alpha'] * 127) + ); + if($index > -1) { + // Yes, return this color index + return $index; + } + + // Allocate a new color index + return imagecolorallocatealpha( + $this->image, + $color['red'], + $color['green'], + $color['blue'], + 127 - ($color['alpha'] * 127) + ); + } + + /** + * Adjusts a color by increasing/decreasing red/green/blue/alpha values independently. + * + * @param string|array $color The color to adjust. + * @param integer $red Red adjustment (-255 - 255). + * @param integer $green Green adjustment (-255 - 255). + * @param integer $blue Blue adjustment (-255 - 255). + * @param integer $alpha Alpha adjustment (-1 - 1). + * @return integer[] An RGBA color array. + */ + public static function adjustColor($color, $red, $green, $blue, $alpha) { + // Normalize to RGBA + $color = self::normalizeColor($color); + + // Adjust each channel + return self::normalizeColor([ + 'red' => $color['red'] + $red, + 'green' => $color['green'] + $green, + 'blue' => $color['blue'] + $blue, + 'alpha' => $color['alpha'] + $alpha + ]); + } + + /** + * Darkens a color. + * + * @param string|array $color The color to darken. + * @param integer $amount Amount to darken (0 - 255). + * @return integer[] An RGBA color array. + */ + public static function darkenColor($color, $amount) { + return self::adjustColor($color, -$amount, -$amount, -$amount, 0); + } + + /** + * Extracts colors from an image like a human would do.™ This method requires the third-party + * library \League\ColorExtractor. If you're using Composer, it will be installed for you + * automatically. + * + * @param integer $count The max number of colors to extract (default 5). + * @param string|array $backgroundColor + * By default any pixel with alpha value greater than zero will + * be discarded. This is because transparent colors are not perceived as is. For example, fully + * transparent black would be seen white on a white background. So if you want to take + * transparency into account, you have to specify a default background color. + * @throws \Exception Thrown if library \League\ColorExtractor is missing. + * @return integer[] An array of RGBA colors arrays. + */ + public function extractColors($count = 5, $backgroundColor = null) { + // Check for required library + if(!class_exists('\League\ColorExtractor\ColorExtractor')) { + throw new \Exception( + 'Required library \League\ColorExtractor is missing.', + self::ERR_LIB_NOT_LOADED + ); + } + + // Convert background color to an integer value + if($backgroundColor) { + $backgroundColor = self::normalizeColor($backgroundColor); + $backgroundColor = \League\ColorExtractor\Color::fromRgbToInt([ + 'r' => $backgroundColor['red'], + 'g' => $backgroundColor['green'], + 'b' => $backgroundColor['blue'] + ]); + } + + // Extract colors from the image + $palette = \League\ColorExtractor\Palette::fromGD($this->image, $backgroundColor); + $extractor = new \League\ColorExtractor\ColorExtractor($palette); + $colors = $extractor->extract($count); + + // Convert colors to an RGBA color array + foreach($colors as $key => $value) { + $colors[$key] = self::normalizeColor(\League\ColorExtractor\Color::fromIntToHex($value)); + } + + return $colors; + } + + /** + * Gets the RGBA value of a single pixel. + * + * @param integer $x The horizontal position of the pixel. + * @param integer $y The vertical position of the pixel. + * @return integer[] An RGBA color array or false if the x/y position is off the canvas. + */ + public function getColorAt($x, $y) { + // Coordinates must be on the canvas + if($x < 0 || $x > $this->getWidth() || $y < 0 || $y > $this->getHeight()) { + return false; + } + + // Get the color of this pixel and convert it to RGBA + $color = imagecolorat($this->image, $x, $y); + $rgba = imagecolorsforindex($this->image, $color); + $rgba['alpha'] = 127 - ($color >> 24) & 0xFF; + + return $rgba; + } + + /** + * Lightens a color. + * + * @param string|array $color The color to lighten. + * @param integer $amount Amount to lighten (0 - 255). + * @return integer[] An RGBA color array. + */ + public static function lightenColor($color, $amount) { + return self::adjustColor($color, $amount, $amount, $amount, 0); + } + + /** + * Normalizes a hex or array color value to a well-formatted RGBA array. + * + * @param string|array $color + * A CSS color name, hex string, or an array [red, green, blue, alpha]. + * You can pipe alpha transparency through hex strings and color names. For example: + * #fff|0.50 <-- 50% white + * red|0.25 <-- 25% red + * @throws \Exception Thrown if color value is invalid. + * @return array [red, green, blue, alpha]. + */ + public static function normalizeColor($color) { + // 140 CSS color names and hex values + $cssColors = [ + 'aliceblue' => '#f0f8ff', 'antiquewhite' => '#faebd7', 'aqua' => '#00ffff', + 'aquamarine' => '#7fffd4', 'azure' => '#f0ffff', 'beige' => '#f5f5dc', 'bisque' => '#ffe4c4', + 'black' => '#000000', 'blanchedalmond' => '#ffebcd', 'blue' => '#0000ff', + 'blueviolet' => '#8a2be2', 'brown' => '#a52a2a', 'burlywood' => '#deb887', + 'cadetblue' => '#5f9ea0', 'chartreuse' => '#7fff00', 'chocolate' => '#d2691e', + 'coral' => '#ff7f50', 'cornflowerblue' => '#6495ed', 'cornsilk' => '#fff8dc', + 'crimson' => '#dc143c', 'cyan' => '#00ffff', 'darkblue' => '#00008b', 'darkcyan' => '#008b8b', + 'darkgoldenrod' => '#b8860b', 'darkgray' => '#a9a9a9', 'darkgrey' => '#a9a9a9', + 'darkgreen' => '#006400', 'darkkhaki' => '#bdb76b', 'darkmagenta' => '#8b008b', + 'darkolivegreen' => '#556b2f', 'darkorange' => '#ff8c00', 'darkorchid' => '#9932cc', + 'darkred' => '#8b0000', 'darksalmon' => '#e9967a', 'darkseagreen' => '#8fbc8f', + 'darkslateblue' => '#483d8b', 'darkslategray' => '#2f4f4f', 'darkslategrey' => '#2f4f4f', + 'darkturquoise' => '#00ced1', 'darkviolet' => '#9400d3', 'deeppink' => '#ff1493', + 'deepskyblue' => '#00bfff', 'dimgray' => '#696969', 'dimgrey' => '#696969', + 'dodgerblue' => '#1e90ff', 'firebrick' => '#b22222', 'floralwhite' => '#fffaf0', + 'forestgreen' => '#228b22', 'fuchsia' => '#ff00ff', 'gainsboro' => '#dcdcdc', + 'ghostwhite' => '#f8f8ff', 'gold' => '#ffd700', 'goldenrod' => '#daa520', 'gray' => '#808080', + 'grey' => '#808080', 'green' => '#008000', 'greenyellow' => '#adff2f', + 'honeydew' => '#f0fff0', 'hotpink' => '#ff69b4', 'indianred ' => '#cd5c5c', + 'indigo ' => '#4b0082', 'ivory' => '#fffff0', 'khaki' => '#f0e68c', 'lavender' => '#e6e6fa', + 'lavenderblush' => '#fff0f5', 'lawngreen' => '#7cfc00', 'lemonchiffon' => '#fffacd', + 'lightblue' => '#add8e6', 'lightcoral' => '#f08080', 'lightcyan' => '#e0ffff', + 'lightgoldenrodyellow' => '#fafad2', 'lightgray' => '#d3d3d3', 'lightgrey' => '#d3d3d3', + 'lightgreen' => '#90ee90', 'lightpink' => '#ffb6c1', 'lightsalmon' => '#ffa07a', + 'lightseagreen' => '#20b2aa', 'lightskyblue' => '#87cefa', 'lightslategray' => '#778899', + 'lightslategrey' => '#778899', 'lightsteelblue' => '#b0c4de', 'lightyellow' => '#ffffe0', + 'lime' => '#00ff00', 'limegreen' => '#32cd32', 'linen' => '#faf0e6', 'magenta' => '#ff00ff', + 'maroon' => '#800000', 'mediumaquamarine' => '#66cdaa', 'mediumblue' => '#0000cd', + 'mediumorchid' => '#ba55d3', 'mediumpurple' => '#9370db', 'mediumseagreen' => '#3cb371', + 'mediumslateblue' => '#7b68ee', 'mediumspringgreen' => '#00fa9a', + 'mediumturquoise' => '#48d1cc', 'mediumvioletred' => '#c71585', 'midnightblue' => '#191970', + 'mintcream' => '#f5fffa', 'mistyrose' => '#ffe4e1', 'moccasin' => '#ffe4b5', + 'navajowhite' => '#ffdead', 'navy' => '#000080', 'oldlace' => '#fdf5e6', 'olive' => '#808000', + 'olivedrab' => '#6b8e23', 'orange' => '#ffa500', 'orangered' => '#ff4500', + 'orchid' => '#da70d6', 'palegoldenrod' => '#eee8aa', 'palegreen' => '#98fb98', + 'paleturquoise' => '#afeeee', 'palevioletred' => '#db7093', 'papayawhip' => '#ffefd5', + 'peachpuff' => '#ffdab9', 'peru' => '#cd853f', 'pink' => '#ffc0cb', 'plum' => '#dda0dd', + 'powderblue' => '#b0e0e6', 'purple' => '#800080', 'rebeccapurple' => '#663399', + 'red' => '#ff0000', 'rosybrown' => '#bc8f8f', 'royalblue' => '#4169e1', + 'saddlebrown' => '#8b4513', 'salmon' => '#fa8072', 'sandybrown' => '#f4a460', + 'seagreen' => '#2e8b57', 'seashell' => '#fff5ee', 'sienna' => '#a0522d', + 'silver' => '#c0c0c0', 'skyblue' => '#87ceeb', 'slateblue' => '#6a5acd', + 'slategray' => '#708090', 'slategrey' => '#708090', 'snow' => '#fffafa', + 'springgreen' => '#00ff7f', 'steelblue' => '#4682b4', 'tan' => '#d2b48c', 'teal' => '#008080', + 'thistle' => '#d8bfd8', 'tomato' => '#ff6347', 'turquoise' => '#40e0d0', + 'violet' => '#ee82ee', 'wheat' => '#f5deb3', 'white' => '#ffffff', 'whitesmoke' => '#f5f5f5', + 'yellow' => '#ffff00', 'yellowgreen' => '#9acd32' + ]; + + // Parse alpha from '#fff|.5' and 'white|.5' + if(is_string($color) && strstr($color, '|')) { + $color = explode('|', $color); + $alpha = (float) $color[1]; + $color = trim($color[0]); + } else { + $alpha = 1; + } + + // Translate CSS color names to hex values + if(is_string($color) && array_key_exists(strtolower($color), $cssColors)) { + $color = $cssColors[strtolower($color)]; + } + + // Translate transparent keyword to a transparent color + if($color === 'transparent') { + $color = ['red' => 0, 'green' => 0, 'blue' => 0, 'alpha' => 0]; + } + + // Convert hex values to RGBA + if(is_string($color)) { + // Remove # + $hex = preg_replace('/^#/', '', $color); + + // Support short and standard hex codes + if(strlen($hex) === 3) { + list($red, $green, $blue) = [ + $hex[0] . $hex[0], + $hex[1] . $hex[1], + $hex[2] . $hex[2] + ]; + } elseif(strlen($hex) === 6) { + list($red, $green, $blue) = [ + $hex[0] . $hex[1], + $hex[2] . $hex[3], + $hex[4] . $hex[5] + ]; + } else { + throw new \Exception("Invalid color value: $color", self::ERR_INVALID_COLOR); + } + + // Turn color into an array + $color = [ + 'red' => hexdec($red), + 'green' => hexdec($green), + 'blue' => hexdec($blue), + 'alpha' => $alpha + ]; + } + + // Enforce color value ranges + if(is_array($color)) { + // RGB default to 0 + $color['red'] = isset($color['red']) ? $color['red'] : 0; + $color['green'] = isset($color['green']) ? $color['green'] : 0; + $color['blue'] = isset($color['blue']) ? $color['blue'] : 0; + + // Alpha defaults to 1 + $color['alpha'] = isset($color['alpha']) ? $color['alpha'] : 1; + + return [ + 'red' => (int) self::keepWithin((int) $color['red'], 0, 255), + 'green' => (int) self::keepWithin((int) $color['green'], 0, 255), + 'blue' => (int) self::keepWithin((int) $color['blue'], 0, 255), + 'alpha' => self::keepWithin($color['alpha'], 0, 1) + ]; + } + + throw new \Exception("Invalid color value: $color", self::ERR_INVALID_COLOR); + } + +} diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php new file mode 100644 index 0000000..1e2b7c7 --- /dev/null +++ b/app/Http/Controllers/AdminController.php @@ -0,0 +1,227 @@ +middleware('auth'); + $this->middleware('admin'); + } + + public function index(Request $request) { + return view('admin.index'); + } + + public function truncategametokens(Request $request) { + GameToken::Truncate(); + + return redirect('/admin')->with('message', 'Cleared all Game Tokens from the database.'); + } + + public function truncateservers(Request $request) { + Server::Truncate(); + + return redirect('/admin')->with('message', 'Cleared all Servers from the database.'); + } + + public function invitekeys(Request $request) { + $invitekeys = InviteKey::query(); + + return view('admin.invitekeys')->with('invitekeys', $invitekeys->orderBy('updated_at', 'DESC')->paginate(10)->appends($request->all())); + } + + public function createinvitekey(Request $request) { + return view('admin.createinvitekey'); + } + + public function generateinvitekey(Request $request) { + $request->validate([ + 'uses' => ['required', 'min:1', 'max:20', 'integer'] + ]); + + $inviteKey = InviteKey::create([ + 'creator' => $request->user()->id, + 'token' => 'TadahKey-' . Str::random(25), + 'uses' => $request['uses'] + ]); + + return redirect('/admin/createinvitekey')->with('success', 'Created invite key. Key: "' . $inviteKey->token . '"'); + } + + public function disableinvitekey(Request $request, $id) { + $invitekey = InviteKey::find($id); + + if (!$invitekey) { + return abort(404); + } + + $invitekey->uses = 0; + $invitekey->save(); + + return redirect('/admin/invitekeys')->with('message', 'Invite key ID: ' . $invitekey->id . ', Token: ' . $invitekey->token . ' disabled.'); + } + + public function ban(Request $request) { + return view('admin.ban'); + } + + public function banuser(Request $request) { + $request->validate([ + 'username' => ['required', 'min:3', 'max:50'], + 'banreason' => ['required', 'max:2000'], + 'unbandate' => ['required', 'date'] + ]); + + $user = User::where('username', $request['username'])->first(); + + if (!$user) { + return redirect('/admin/ban')->with('error', 'That user does not exist. Name: ' . $request['username']); + } + + if ($user->banned) { + return redirect('/admin/ban')->with('error', 'That user is already banned. Reason: ' . $user->ban_reason); + } + + if ($request->user()->id == $user->id) { + return redirect('/admin/ban')->with('error', 'You\'re trying to ban yourself?'); + } + + $user->banned = true; + $user->ban_reason = $request['banreason']; + $user->banned_until = Carbon::parse($request['unbandate']); + $user->save(); + + return redirect('/admin/ban')->with('success', $user->username . ' has been banned until ' . $user->banned_until); + } + + public function unban(Request $request) { + return view('admin.unban'); + } + + public function unbanuser(Request $request) { + $request->validate([ + 'username' => ['required', 'min:3', 'max:20'] + ]); + + $user = User::where('username', $request['username'])->first(); + + if (!$user) { + return redirect('/admin/unban')->with('error', 'That user does not exist. Name: ' . $request['username']); + } + + if (!$user->banned) { + return redirect('/admin/unban')->with('error', 'That user is not banned.'); + } + + if ($request->user()->id == $user->id) { + return redirect('/admin/unban')->with('error', 'but... but... but... you are not banned......'); + } + + $user->banned = false; + $user->ban_reason = null; + $user->banned_until = null; + $user->save(); + + return redirect('/admin/unban')->with('success', $user->username . ' has been unbanned.'); + } + + public function xmlitem(Request $request) + { + return view('admin.newxmlitem'); + } + + public function createxmlitem(Request $request) + { + $request->validate([ + 'name' => ['required', 'string', 'max:100'], + 'description' => ['string', 'max:2000'], + 'price' => ['required', 'integer', 'min:0', 'max:999999'], + 'xml' => ['required', 'string'], + 'type' => ['required', 'string'] + ]); + + $item = Item::create([ + 'name' => $request['name'], + 'description' => $request['description'], + 'creator' => $request->user()->id, + 'thumbnail_url' => $request['thumbnailurl'], + 'price' => $request['price'], + 'type' => $request['type'], + 'sales' => 0, + 'onsale' => true, + 'approved' => config('app.assets_approved_by_default') + ]); + + Storage::disk('public')->put('items/' . $item->id, $request['xml']); + + if ($item->type == "Hat" || $item->type == "Model" || $item->type == "Gear") { + RenderQueue::create([ + 'type' => 'xml', + 'target_id' => $item->id + ]); + } + + if ($item->type == "Package") { + RenderQueue::create([ + 'type' => 'clothing', + 'target_id' => $item->id + ]); + } + + OwnedItems::create([ + 'user_id' => $request->user()->id, + 'item_id' => $item->id, + 'wearing' => false + ]); + + return redirect(route('catalog.item', $item->id))->with('message', 'XML asset successfully created.'); + } + + public function robloxitemdata(Request $request, $id) + { + $response = Http::asForm()->get('https://api.roblox.com/marketplace/productinfo', [ + "assetId" => $id + ]); + + return $response; + } + + public function robloxxmldata(Request $request, $id, $version) + { + $response = Http::get('https://assetdelivery.roblox.com/v1/asset?id=' . intval($id) . "&version=" . intval($version)); + + return $response; + } + + public function regenalluserthumbs(Request $request) + { + if (!$request->user()->id == 1) { + abort(404); + } + + $users = User::all(); + foreach ($users as $user) { + RenderQueue::create([ + "type" => "user", + "target_id" => $user->id + ]); + } + + return "OK"; + } +} diff --git a/app/Http/Controllers/AssetController.php b/app/Http/Controllers/AssetController.php new file mode 100644 index 0000000..9b2d11a --- /dev/null +++ b/app/Http/Controllers/AssetController.php @@ -0,0 +1,62 @@ +id) { + abort(404); + } + + $item = Item::findOrFail($request->id); + + if (Storage::disk('public')->exists('items/' . $item->id)) { + $response = Response::make(Storage::disk('public')->get('items/' . $item->id, 200)); + $response->header('Content-Type', 'application/octet-stream'); + return $response; + } else { + abort(404); + } + } + + public function getxmlasset(Request $request) + { + if (!$request->id) { + abort(404); + } + + $item = Item::findOrFail($request->id); + + if ($item->isXmlAsset()) { + if (Storage::disk('public')->exists('items/' . $request->id)) { + $response = Response::make(Storage::disk('public')->get('items/' . $request->id, 200)); + $response->header('Content-Type', 'application/octet-stream'); + return $response; + } else { + return abort(404); + } + } + + return view('client.xmlasset')->with('item', $item); + } + + public function robloxredirect(Request $request) + { + if (!$request->id) { + abort(404); + } + + if ($request->id == "humHealth") { + return view('client.humanoidHealth'); + } + + return redirect('https://assetdelivery.roblox.com/v1/asset/?id=' . $request->id); + } +} diff --git a/app/Http/Controllers/Auth/ConfirmPasswordController.php b/app/Http/Controllers/Auth/ConfirmPasswordController.php new file mode 100644 index 0000000..138c1f0 --- /dev/null +++ b/app/Http/Controllers/Auth/ConfirmPasswordController.php @@ -0,0 +1,40 @@ +middleware('auth'); + } +} diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php new file mode 100644 index 0000000..465c39c --- /dev/null +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -0,0 +1,22 @@ +middleware('guest')->except('logout'); + } +} diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php new file mode 100644 index 0000000..3bcd2c4 --- /dev/null +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -0,0 +1,111 @@ +middleware('guest'); + } + + /** + * Get a validator for an incoming registration request. + * + * @param array $data + * @return \Illuminate\Contracts\Validation\Validator + */ + protected function validator(array $data) + { + return Validator::make($data, [ + 'username' => ['required', 'string', 'min:3', 'max:20', 'unique:users', 'alpha_num'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], + 'password' => ['required', 'string', 'min:4', 'confirmed'], + 'invite_key' => ['string', new InviteKeyRule()] + ]); + } + + /** + * Create a new user instance after a valid registration. + * + * @param array $data + * @return \App\Models\User + */ + protected function create(array $data) + { + if (!config('app.registration_enabled')) { + return abort(403); + } + + $user = User::create([ + 'username' => $data['username'], + 'email' => $data['email'], + 'password' => Hash::make($data['password']), + 'register_ip' => '0.0.0.0', + 'last_ip' => '0.0.0.0' + ]); + + BodyColors::create([ + 'user_id' => $user->id, + 'head_color' => 1, + 'torso_color' => 1010, + 'left_arm_color' => 1, + 'right_arm_color' => 1, + 'left_leg_color' => 26, + 'right_leg_color' => 26 + ]); + + RenderQueue::create([ + 'type' => 'user', + 'target_id' => $user->id + ]); + + + if (isset($data['invite_key'])) { + $invitekey = InviteKey::where('token', $data['invite_key'])->first(); + $user->invite_key = $data['invite_key']; + $user->save(); + + $invitekey->uses = $invitekey->uses - 1; + $invitekey->save(); + } + + return $user; + } +} diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php new file mode 100644 index 0000000..b1726a3 --- /dev/null +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -0,0 +1,30 @@ +middleware('auth'); + $this->middleware('signed')->only('verify'); + $this->middleware('throttle:6,1')->only('verify', 'resend'); + } +} diff --git a/app/Http/Controllers/BodyColorsController.php b/app/Http/Controllers/BodyColorsController.php new file mode 100644 index 0000000..355a78a --- /dev/null +++ b/app/Http/Controllers/BodyColorsController.php @@ -0,0 +1,135 @@ + "Light blue", "id" => "45", "rgb" => "180,210,228"], + ["name" => "Pastel light blue", "id" => "1024", "rgb" => "175,221,255"], + ["name" => "Pastel Blue", "id" => "11", "rgb" => "128,187,219"], + ["name" => "Medium blue", "id" => "102", "rgb" => "110,153,202"], + ["name" => "Bright blue", "id" => "23", "rgb" => "13,105,172"], + ["name" => "Really blue", "id" => "1010", "rgb" => "0,0,255"], + ["name" => "Deep blue", "id" => "1012", "rgb" => "33,84,185"], + ["name" => "Navy blue", "id" => "1011", "rgb" => "0,32,96"], + ["name" => "Pastel blue-green", "id" => "1027", "rgb" => "159,243,233"], + ["name" => "Teal", "id" => "1018", "rgb" => "18,238,212"], + ["name" => "Sand green", "id" => "151", "rgb" => "120,144,130"], + ["name" => "Grime", "id" => "1022", "rgb" => "127,142,100"], + ["name" => "Sand blue", "id" => "135", "rgb" => "116,134,157"], + ["name" => "Toothpaste", "id" => "1019", "rgb" => "0,255,255"], + ["name" => "Cyan", "id" => "1013", "rgb" => "4,175,236"], + ["name" => "Bright bluish green", "id" => "107", "rgb" => "0,143,156"], + ["name" => "Pastel green", "id" => "1028", "rgb" => "204,255,204"], + ["name" => "Medium green", "id" => "29", "rgb" => "161,196,140"], + ["name" => "Br. yellowish green", "id" => "119", "rgb" => "164,189,71"], + ["name" => "Bright green", "id" => "37", "rgb" => "75,151,75"], + ["name" => "Camo", "id" => "1021", "rgb" => "58,125,21"], + ["name" => "Lime green", "id" => "1020", "rgb" => "58,125,21"], + ["name" => "Dark green", "id" => "28", "rgb" => "40,127,71"], + ["name" => "Earth green", "id" => "141", "rgb" => "39,70,45"], + ["name" => "Pastel yellow", "id" => "1029", "rgb" => "255,255,204"], + ["name" => "Cool yellow", "id" => "226", "rgb" => "253,234,141"], + ["name" => "Olive", "id" => "1008", "rgb" => "193,190,66"], + ["name" => "Bright yellow", "id" => "24", "rgb" => "245,205,48"], + ["name" => "Deep orange", "id" => "1017", "rgb" => "255,175,0"], + ["name" => "New Yeller", "id" => "1009", "rgb" => "255,255,0"], + ["name" => "Deep orange", "id" => "1005", "rgb" => "255,176,0"], + ["name" => "Br. yellowish orange", "id" => "105", "rgb" => "226,155,64"], + ["name" => "Pastel orange", "id" => "1025", "rgb" => "255,201,201"], + ["name" => "Light orange", "id" => "125", "rgb" => "234,184,146"], + ["name" => "Medium red", "id" => "101", "rgb" => "218,134,122"], + ["name" => "Dusty Rose", "id" => "1007", "rgb" => "163,75,75"], + ["name" => "Olive", "id" => "1016", "rgb" => "193,190,66"], + ["name" => "Hot pink", "id" => "1032", "rgb" => "255,0,191"], + ["name" => "Really red", "id" => "1004", "rgb" => "255,0,0"], + ["name" => "Bright red", "id" => "21", "rgb" => "196,40,28"], + ["name" => "Light reddish violet", "id" => "9", "rgb" => "232,186,200"], + ["name" => "Pastel violet", "id" => "1026", "rgb" => "177,167,255"], + ["name" => "Alder", "id" => "1006", "rgb" => "180,128,255"], + ["name" => "Sand red", "id" => "153", "rgb" => "149,121,119"], + ["name" => "Lavender", "id" => "1023", "rgb" => "140,91,159"], + ["name" => "Magenta", "id" => "1015", "rgb" => "170,0,170"], + ["name" => "Royal purple", "id" => "1031", "rgb" => "98,37,209"], + ["name" => "Bright violet", "id" => "104", "rgb" => "107,50,124"], + ["name" => "Brick yellow", "id" => "5", "rgb" => "215,197,154"], + ["name" => "Pastel brown", "id" => "1030", "rgb" => "255,204,153"], + ["name" => "Nougat", "id" => "18", "rgb" => "204,142,105"], + ["name" => "Bright orange", "id" => "106", "rgb" => "218,133,65"], + ["name" => "Dark orange", "id" => "38", "rgb" => "160,95,53"], + ["name" => "CGA brown", "id" => "1014", "rgb" => "170,85,0"], + ["name" => "Brown", "id" => "217", "rgb" => "124,92,70"], + ["name" => "Reddish brown", "id" => "192", "rgb" => "105,64,40"], + ["name" => "Institutional white", "id" => "1001", "rgb" => "248,248,248"], + ["name" => "White", "id" => "1", "rgb" => "242,243,243"], + ["name" => "Light stone grey", "id" => "208", "rgb" => "229,228,223"], + ["name" => "Mid gray", "id" => "1002", "rgb" => "205,205,205"], + ["name" => "Medium stone grey", "id" => "194", "rgb" => "163,162,165"], + ["name" => "Dark stone grey", "id" => "199", "rgb" => "99,95,98"], + ["name" => "Black", "id" => "26", "rgb" => "27,42,53"], + ["name" => "Really black", "id" => "1003", "rgb" => "17,17,17"] + ]; + + public function __construct() + { + $this->middleware('auth'); + } + + public function characterBodyColors(Request $request) + { + $bodyColors = BodyColors::where('user_id', $request->user()->id)->firstOrFail(); + + return view('users.charactercolors')->with(['colors' => $bodyColors, 'codes' => $this->colors, 'type' => null]); + } + + public function changeBodyColor(Request $request) { + $colors = BodyColors::where('user_id', $request->user()->id)->firstOrFail(); + + if (!$request->color) { + abort(500); + } + + if (!$request->part) { + abort(500); + } + + if (!$this->colors[array_search($request->color, array_column($this->colors, 'id'))]) { + abort(403); + } + + switch ($request->part) { + default: + abort(500); + case "head": + $colors->head_color = $request->color; + break; + case "torso": + $colors->torso_color = $request->color; + break; + case "leftarm": + $colors->left_arm_color = $request->color; + break; + case "leftleg": + $colors->left_leg_color = $request->color; + break; + case "rightarm": + $colors->right_arm_color = $request->color; + break; + case "rightleg": + $colors->right_leg_color = $request->color; + break; + } + + $colors->save(); + + if ($colors) { + return $this->colors[array_search($request->color, array_column($this->colors, 'id'))]['rgb']; + } + + return abort(500); + } +} diff --git a/app/Http/Controllers/CatalogController.php b/app/Http/Controllers/CatalogController.php new file mode 100644 index 0000000..d5e2427 --- /dev/null +++ b/app/Http/Controllers/CatalogController.php @@ -0,0 +1,272 @@ +middleware('auth'); + } + + public function index(Request $request, $requestType) + { + $type = "Hat"; + switch ($requestType) { + case "hats": + default: + $type = "Hat"; + break; + case "shirts": + $type = "Shirt"; + break; + case "pants": + $type = "Pants"; + break; + case "tshirts": + $type = "T-Shirt"; + break; + case "images": + $type = "Image"; + break; + case "faces": + $type = "Face"; + break; + case "gears": + $type = "Gear"; + break; + case "heads": + $type = "Head"; + break; + case "packages": + $type = "Package"; + break; + case "models": + $type = "Model"; + break; + } + + $items = Item::where(['type' => $type, 'approved' => true, 'onsale' => true])->orderBy('created_at', 'desc'); + + if (request('search')) { + $items->where('name', 'LIKE', '%' . request('search') . '%'); + } + + return view('catalog.index')->with(['items' => $items->paginate(20)->appends($request->all()), 'type' => $type, 'search' => request('search')]); + } + + public function item(Request $request, $id) + { + $item = Item::findOrFail($id); + $ownedItem = OwnedItems::where(['user_id' => $request->user()->id, 'item_id' => $item->id])->first(); + + return view('catalog.item')->with(['item' => $item, 'ownedItem' => $ownedItem]); + } + + public function upload(Request $request) + { + return view('catalog.upload'); + } + + public function processupload(Request $request) + { + // TODO: #1 Modify thumbnail code below for new asset types in the future (audio, mesh, etc.) + + if (! config('app.item_creation_enabled')) { + abort(403); + } + + $request->validate([ + 'name' => ['required', 'string', 'max:100'], + 'description' => ['string', 'max:2000'], + 'price' => ['required', 'integer', 'min:0', 'max:999999'], + 'type' => ['required', new AssetTypesRule()], + 'asset' => ['required', 'max:51200', 'image'] + ]); + + $user = $request->user(); + + if ($request['type'] == "Face" && !$user->admin || $request['type'] == "Hat") { + return abort(403); + } + + if ($user->money < config('app.asset_upload_cost')) { + return redirect('/catalog/upload')->with('error', 'You do not have enough money to upload an asset.'); + } + + $user->money = $user->money - config('app.asset_upload_cost'); + $user->save(); + + $item = Item::create([ + 'name' => $request['name'], + 'description' => $request['description'], + 'creator' => $user->id, + 'price' => $request['price'], + 'type' => $request['type'], + 'sales' => 0, + 'onsale' => true, + 'approved' => config('app.assets_approved_by_default') + ]); + + try { + $img = new SimpleImage($request->file('asset')); + + switch ($request->type) { + case "Face": + case "T-Shirt": + default: + $img->bestFit(250, 250); + break; + case "Shirt": + $img->crop(165, 201, 424, 74); + break; + case "Pants": + $img->crop(217, 482, 371, 355); + break; + } + + $savePath = storage_path() . "/app/public/items/" . $item->id . '_thumbnail.png'; + $img->toFile($savePath, 'image/png', 75); + } catch (\Exception $exception) { + Storage::disk('public')->copy('items/asset-error.png', 'items/' . $item->id . '_thumbnail.png'); + } + + $request->file('asset')->move(storage_path() . "/app/public/items/", $item->id); + + OwnedItems::create([ + 'user_id' => $user->id, + 'item_id' => $item->id, + 'wearing' => false + ]); + + if ($item->type == "Shirt" || $item->type == "Pants") { + RenderQueue::create([ + 'type' => 'clothing', + 'target_id' => $item->id + ]); + } + + return redirect('/item/' . $item->id)->with('message', 'Item successfully uploaded.'); + } + + public function configure(Request $request, $id) + { + $item = Item::findOrFail($id); + $user = $request->user(); + + if (!$item) { + abort(404); + } + + if (!$user == $item->user && !$user->admin) { + abort(403); + } + + return view('catalog.configure')->with('item', $item); + } + + public function processconfigure(Request $request, $id) + { + $item = Item::findOrFail($id); + $user = $request->user(); + + if (!$item) { + abort(404); + } + + if (!$user == $item->user && !$user->admin) { + abort(403); + } + + $request->validate([ + 'name' => ['required', 'string', 'max:100'], + 'description' => ['string', 'max:2000'], + 'price' => ['required', 'integer', 'min:0', 'max:999999'], + 'xml' => ['string'] + ]); + + $item->name = $request['name']; + $item->description = $request['description']; + $item->price = $request['price']; + $item->onsale = $request->has('onsale'); // check boxes are weird + + if ($item->isXmlAsset()) { + $item->thumbnail_url = $request['thumbnailurl']; + + Storage::disk('public')->put('items/' . $item->id, $request['xml']); + } + + $item->save(); + + return redirect(route('catalog.item', $item->id))->with('message', 'Changes saved successfully.'); + } + + public function buyitem(Request $request, $id) + { + $item = Item::findOrFail($id); + $ownedItem = OwnedItems::where(['user_id' => $request->user()->id, 'item_id' => $item->id])->first(); + + if (!$item->onsale) { + abort(403); + } + + if (!$item->approved) { + abort(403); + } + + if ($ownedItem) { + abort(403); + } + + if ($request->user()->money < $item->price) { + abort(403); + } + + OwnedItems::create([ + 'user_id' => $request->user()->id, + 'item_id' => $item->id, + 'wearing' => false + ]); + + $request->user()->money = $request->user()->money - $item->price; + $request->user()->save(); + + $item->user->money = $item->user->money + $item->price; + $item->user->save(); + + $item->sales = $item->sales + 1; + $item->save(); + + return redirect(route('catalog.item', $item->id))->with('message', 'Item purchased successfully.'); + } + + public function getthumbnail(Request $request, $id) + { + $item = Item::findOrFail($id); + + if ($item->thumbnail_url) { + return redirect($item->thumbnail_url); + } + + $path = 'items/asset-error.png'; // default image (not found) + if (Storage::disk('public')->exists('items/' . $item->id . '_thumbnail.png')) { + $path = $item->approved ? + ('items/' . $id . '_thumbnail.png') : // item thumbnail if it's approved + 'items/asset-notapproved.png'; // not approved image otherwise + } + + $response = Response::make(Storage::disk('public') + ->get($path, 200)) + ->header('Content-Type', 'image/png'); + return $response; + } +} diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php new file mode 100644 index 0000000..ce7d76c --- /dev/null +++ b/app/Http/Controllers/ClientController.php @@ -0,0 +1,158 @@ +user_id = $request->user()->id; + $token->server_id = $serverId; + $token->token = $tokenString; + $token->save(); + + return $tokenString; + } else { + return abort(404); + } + } + + public function join(Request $request, $requestToken) + { + $token = GameToken::where('token', $requestToken)->first(); + + if (!$token) { + return 'game:SetMessage("Invalid join token. If this error persists, contact us.")'; + } + + return view('client.join')->with('token', $token); + } + + public function host(Request $request, $secret) + { + $server = Server::where('secret', $secret)->first(); + + if (!$server) { + return 'print("Invalid server.")'; + } + + return view('client.host')->with('server', $server); + } + + public function admin(Request $request, $secret) + { + $server = Server::where('secret', $secret)->first(); + + if (!$server) { + return 'print("Invalid server.")'; + } + + $admins = User::where('admin', true)->get(); + + return view('client.admin')->with(['server' => $server, 'admins' => $admins]); + } + + public function bodycolors(Request $request, $id) + { + $user = User::findOrFail($id); + $bodycolors = BodyColors::where('user_id', $user->id)->firstOrFail(); + + return view('users.bodycolors')->with('bodycolors', $bodycolors); + } + + public function charapp(Request $request, $id) + { + $user = User::findOrFail($id); + + $appearance = array(); + $appearance[] = url('/users/' . $user->id . '/bodycolors'); + + $wearingItems = OwnedItems::where(['user_id' => $user->id, 'wearing' => true])->get(); + + foreach ($wearingItems as $wearingItem) { + $item = Item::find($wearingItem->item_id); + + if ($item->approved) { + if ($item->isXmlAsset()) { + $appearance[] = url('/asset?id=' . $item->id); + } else { + $appearance[] = url('/xmlasset?id=' . $item->id); + } + } + } + + return join(';', $appearance); + } + + public function ping(Request $request, $secret) + { + $server = Server::where('secret', $secret)->first(); + + if (!$server) { + return abort(404); + } + + Cache::put('server_online' . $server->id, true, Carbon::now()->addMinutes(1)); + + return 'OK'; + } + + public function getuserthumbnail(Request $request) + { + $user = User::findOrFail($request->userId); + + $path = 'items/asset-error.png'; // default image (not found) + if (Storage::disk('public')->exists('users/user_' . $user->id . '.png')) { + $path = $user->banned ? + 'items/asset-notapproved.png' : // user thumbnail if they're not banned + ('users/user_' . $user->id . '.png'); // otherwise not approved if they're banned + } + + $response = Response::make(Storage::disk('public') + ->get($path, 200)) + ->header('Content-Type', 'image/png'); + return $response; + } + + public function signscript(Request $request) + { + if (!$request->script) { + abort(400); + } + + if (!$request->version) { + abort(400); + } + + $signature = ""; + openssl_sign("\r\n" . $request->script, $signature, "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQCz+CJqGw2KhlX4fodgGk93S3jekukBqjXoUARhD5UEFZnjWQxLe/oRNQacHNnsvRlfI0r2Z8IrFiHUA+L7jdVZJG4vdk620OCGUy1xVbdDpV/Ja/4mF7HUC+2n+OMhVunAVX4/1rBWSRyCAl2PJ6ysgkY9DHWtZpXpBLrsdMgsrQIDAQABAoGAYIenbeI00Shc1HyJgDKcjRAeNMP31rzFTWYd8zG4bAhqElehEJve9XvLn9CZ0zFaen0jqCbfLt0gJ+gtx1+8Hr1T9WIfFvvv2MoUN+p5s0r/8DRUpzi2Yv6SfTeJNubO0XctJ4hoIOsLGt4Hik6pmrRhn61bCdav6vNbdVot9MECQQDnUNAx6w7hPRInJh7960yNWiR0HjIFgGtB25RYq4vflshxcVEjPtfkXDNDGzw3xGTGZFXTGQynmUtYR3vik/WPAkEAxyyd6XgY/8kOYCLOcu9JrJCS/iG0WjiqPSep+8HKe9OqXBQqjZNzTQJzCR3ogcPbYfQq7lwcA6n9UJWiSQD0AwJAX2dPVydRrchYclkgsy2XFz20h0fk7av3kOQVnTSzrfYsmc1Y36aNuJvmcKkM/xs7TTAYzcYpF/77ul9RUzQfNQJACUBFRWbSom7QQB7dv/DlVyKP8UXXfqlLHvQMrSjfIsk+DHDTWSgUHuuSNEYzWnOiaPZSWCfnFTR8E5Yfp4xnyQJBAIr5UxtuUY3LaztdQb4m9xwl9dX6E+tUXUu+xmwWbu99VSWfWJ7ppja6gracYqwwf3vlnpS5591Wi6jhrCiwtoo=\n-----END RSA PRIVATE KEY-----", OPENSSL_ALGO_SHA1); + + $base64signature = base64_encode($signature); + + $signedscript = ""; + if ($request->version == "new") { + $signedscript = "--rbxsig%" . $base64signature . "%\r\n" . $request->script; + } else { + $signedscript = "%" . $base64signature . "%\r\n" . $request->script; + } + + return $signedscript; + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..a0a2a8a --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ +middleware('auth'); + } + + public function index(Request $request) + { + $categories = ForumCategory::orderBy('priority', 'desc')->take(50)->get(); + + return view('forum.index')->with('categories', $categories); + } + + public function getcategory(Request $request, $id) + { + $category = ForumCategory::findOrFail($id); + $posts = ForumThread::where('category_id', $id)->orderBy('stickied', 'desc')->orderBy('updated_at', 'desc'); + + return view('forum.category')->with(['posts' => $posts->paginate(15), 'category' => $category]); + } + + public function createthread(Request $request, $id) + { + $category = ForumCategory::findOrFail($id); + + if ($category->admin_only) { + if (!$request->user()->admin) { + abort(404); + } + } + + return view('forum.newpost')->with('category', $category); + } + + public function docreatethread(Request $request, $id) + { + $category = ForumCategory::findOrFail($id); + + if ($category->admin_only) { + if (!$request->user()->admin) { + abort(404); + } + } + + if (Cache::has('user-posted' . $request->user()->id)) { + return redirect(route('forum.createthread', $category->id))->with('error', 'Posts can only be made every ' . config('app.posting_cooldown') . ' seconds.'); + } + + $request->validate([ + 'title' => ['required', 'string', 'max:100'], + 'body' => ['required', 'string', 'min:3', 'max:2000'] + ]); + + Cache::put('user-posted' . $request->user()->id, true, Carbon::now()->addSeconds(config('app.posting_cooldown'))); + + $thread = ForumThread::create([ + 'category_id' => $category->id, + 'user_id' => $request->user()->id, + 'title' => $request->title, + 'body' => $request->body, + 'stickied' => false, + 'locked' => false + ]); + + $category->touch(); + + return redirect(route('forum.getthread', $thread->id))->with('message', 'Successfully posted thread.'); + } + + public function getthread(Request $request, $id) + { + $thread = ForumThread::findOrFail($id); + $replies = ForumPost::where('thread_id', $thread->id)->orderBy('created_at', 'asc'); + $category = $thread->category; + + return view('forum.post', ['post' => $thread, 'replies' => $replies->paginate(14), 'category' => $category]); + } + + public function editthread(Request $request, $id) + { + if (!$request->user()->admin) { + abort(404); + } + + $thread = ForumThread::findOrFail($id); + + return view('forum.editpost')->with('post', $thread); + } + + public function doeditthread(Request $request, $id) + { + if (!$request->user()->admin) { + abort(404); + } + + $thread = ForumThread::findOrFail($id); + + $request->validate([ + 'title' => ['required', 'string', 'max:100'], + 'body' => ['required', 'string', 'min:3', 'max:2000'] + ]); + + $thread->title = $request->title; + $thread->body = $request->body; + $thread->save(); + + $thread->category->touch(); + + return redirect(route('forum.getthread', $thread->id))->with('message', 'Successfully edited thread.'); + } + + public function deletethread(Request $request, $id) + { + if (!$request->user()->admin) { + abort(404); + } + + $thread = ForumThread::findOrFail($id); + $category = $thread->category; + + foreach ($thread->replies as $reply) { + $reply->delete(); + } + + $thread->delete(); + + return redirect(route('forum.category', $category->id))->with('message', 'Successfully deleted thread.'); + } + + public function togglestickythread(Request $request, $id) + { + if (!$request->user()->admin) { + abort(404); + } + + $thread = ForumThread::findOrFail($id); + + $thread->stickied = !$thread->stickied; + $thread->save(); + + return redirect(route('forum.getthread', $thread->id))->with('message', 'Successfully toggled thread sticky.'); + } + + public function togglelock(Request $request, $id) + { + if (!$request->user()->admin) { + abort(404); + } + + $thread = ForumThread::findOrFail($id); + + $thread->locked = !$thread->locked; + $thread->save(); + + return redirect(route('forum.getthread', $thread->id))->with('message', 'Successfully toggled thread lock.'); + } + + public function createreply(Request $request, $id) + { + $thread = ForumThread::findOrFail($id); + + if ($thread->locked) { + abort(403); + } + + return view('forum.newreply')->with('post', $thread); + } + + public function docreatereply(Request $request, $id) + { + $thread = ForumThread::findOrFail($id); + + if ($thread->locked) { + abort(403); + } + + if (Cache::has('user-posted' . $request->user()->id)) { + return redirect(route('forum.createreply', $thread->id))->with('error', 'Posts can only be made every ' . config('app.posting_cooldown') . ' seconds.'); + } + + $request->validate([ + 'body' => ['required', 'string', 'min:3', 'max:2000'] + ]); + + Cache::put('user-posted' . $request->user()->id, true, Carbon::now()->addSeconds(config('app.posting_cooldown'))); + + $reply = ForumPost::create([ + 'thread_id' => $thread->id, + 'category_id' => $thread->category->id, + 'user_id' => $request->user()->id, + 'body' => $request->body, + 'stickied' => false + ]); + + $thread->touch(); + $thread->category->touch(); + + return redirect(route('forum.getthread', $thread->id))->with('message', 'Successfully posted reply.'); + } + + public function editreply(Request $request, $id) + { + if (!$request->user()->admin) { + abort(404); + } + + $reply = ForumPost::findOrFail($id); + + return view('forum.editreply')->with('reply', $reply); + } + + public function doeditreply(Request $request, $id) + { + if (!$request->user()->admin) { + abort(404); + } + + $reply = ForumPost::findOrFail($id); + + $request->validate([ + 'body' => ['required', 'string', 'min:3', 'max:2000'] + ]); + + $reply->body = $request->body; + $reply->save(); + + $reply->category->touch(); + + return redirect(route('forum.getthread', $reply->thread->id))->with('message', 'Successfully edited reply.'); + } + + public function deletereply(Request $request, $id) + { + if (!$request->user()->admin) { + abort(404); + } + + $reply = ForumPost::findOrFail($id); + $thread = $reply->thread; + + $reply->delete(); + + return redirect(route('forum.getthread', $thread->id))->with('message', 'Successfully deleted reply.'); + } +} diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php new file mode 100644 index 0000000..aba092d --- /dev/null +++ b/app/Http/Controllers/HomeController.php @@ -0,0 +1,31 @@ +middleware('auth'); + } + + /** + * Show the application dashboard. + * + * @return \Illuminate\Contracts\Support\Renderable + */ + public function index(Request $request) + { + $servers = Server::where('creator', $request->user()->id)->get(); + + return view('home')->with('servers', $servers); + } +} diff --git a/app/Http/Controllers/RenderController.php b/app/Http/Controllers/RenderController.php new file mode 100644 index 0000000..d1256ca --- /dev/null +++ b/app/Http/Controllers/RenderController.php @@ -0,0 +1,54 @@ +type . ':' . $queueitem->target_id . ':' . $queueitem->id . ';'; + } + + return substr_replace($string, "", -1); + } + + public function upload(Request $request) { + $thumbnailKey = $request->thumbnailkey; + $thumbQueueId = $request->thumbqueueid; + + if (!$thumbnailKey == config('app.thumbnail_key')) { + abort(403); + } + + if (!$thumbQueueId) { + abort(400); + } + + if (!$request->hasFile('file')) { + abort(400); + } + + $queue = RenderQueue::where(['id' => $thumbQueueId])->firstOrFail(); + + if ($queue->type == "user") { + $request->file('file')->move(storage_path() . '/app/public/users/', 'user_' . $queue->target_id . '.png'); + } else { + $request->file('file')->move(storage_path() . '/app/public/items/', $queue->target_id . '_thumbnail.png'); + } + + $queue->delete(); + + return 'OK'; + } + + public function getClothingCharApp(Request $request, $id) + { + return url('/xmlasset?id=' . $id); + } +} diff --git a/app/Http/Controllers/ServersController.php b/app/Http/Controllers/ServersController.php new file mode 100644 index 0000000..7142095 --- /dev/null +++ b/app/Http/Controllers/ServersController.php @@ -0,0 +1,112 @@ +middleware('auth'); + } + + public function index(Request $request) + { + $servers = Server::orderBy('updated_at', 'DESC') + ->paginate(10) + ->appends($request->all()); + + return view('servers.index')->with('servers', $servers); + } + + public function server(Request $request, $id) + { + $server = Server::findOrFail($id); + + return view('servers.server')->with('server', $server); + } + + public function create(Request $request) + { + $request->validate([ + 'name' => ['required', 'string', 'max:40'], + 'description' => ['string', 'max:250'], + 'ipaddress' => ['required', 'string', 'ipv4'], + 'port' => ['integer'] + ]); + + $server = Server::create([ + 'name' => $request['name'], + 'description' => $request['description'], + 'creator' => $request->user()->id, + 'ip' => $request['ipaddress'], + 'port' => $request['port'], + 'secret' => Str::random(20) + ]); + + return redirect(route('servers.index', $server->id)); + } + + public function delete(Request $request, $id) + { + $user = $request->user(); + $server = Server::findOrFail($id); + + if (!$user == $server->user && !$user->admin) { + abort(403); + } + + $server->delete(); + + return redirect(route('servers.index'))->with('message', 'Server successfully deleted.'); + } + + public function configure(Request $request, $id) + { + $server = Server::findOrFail($id); + $user = $request->user(); + + if (!$server) { + abort(404); + } + + if (!$user == $server->user && !$user->admin) { + abort(403); + } + + return view('servers.configure')->with('server', $server); + } + + public function processconfigure(Request $request, $id) + { + $server = Server::findOrFail($id); + $user = $request->user(); + + if (!$server) { + abort(404); + } + + if (!$user == $server->user && !$user->admin) { + abort(403); + } + + $request->validate([ + 'name' => ['required', 'string', 'max:40'], + 'description' => ['string', 'max:250'], + 'ipaddress' => ['required', 'string', 'ipv4'], + 'port' => ['integer'] + ]); + + $server->name = $request['name']; + $server->description = $request['description']; + $server->ip = $request['ipaddress']; + $server->port = $request['port']; + + $server->save(); + + return redirect(route('servers.server', $server->id))->with('success', 'Changes saved successfully.'); + } +} diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php new file mode 100644 index 0000000..18d189f --- /dev/null +++ b/app/Http/Controllers/UsersController.php @@ -0,0 +1,210 @@ +middleware('auth'); + } + + public function index(Request $request) + { + $users = User::query(); + + if (request('search')) { + $users->where('username', 'LIKE', '%' . request('search') . '%')->orderBy('last_online', 'desc'); + } else { + $users->orderBy('last_online', 'desc'); + } + + return view('users.index')->with('users', $users->paginate(10)->appends($request->all())); + } + + public function me(Request $request) + { + $servers = Server::where('creator', $request->user()->id)->get(); + + return view('users.user')->with('servers', $servers); + } + + public function profile(Request $request, $id) + { + $user = User::findOrFail($id); + $servers = Server::where('creator', $user->id)->get(); + + return view('users.profile')->with(['user' => $user, 'servers' => $servers]); + } + + public function banned(Request $request) + { + if (!$request->user()->banned) { + return redirect(route('home')); + } + + return view('users.banned'); + } + + public function settings(Request $request) + { + return view('users.settings'); + } + + public function getthumbnail(Request $request, $id) + { + $user = User::findOrFail($id); + $userInQueue = RenderQueue::where(['type' => 'user', 'target_id' => $user->id])->first(); + + $path = 'items/asset-error.png'; // default image (not found) + if (Storage::disk('public')->exists('users/user_' . $user->id . '.png')) { + $path = $user->banned ? + 'items/asset-notapproved.png' : // user thumbnail if they're not banned + ('users/user_' . $user->id . '.png'); // otherwise not approved if they're banned + } + + if ($userInQueue) { // if user is in render queue, return loading spinner gif + return redirect(asset('images/asset-loading.gif')); + } + + $response = Response::make(Storage::disk('public') + ->get($path, 200)) + ->header('Content-Type', 'image/png'); + return $response; + } + + public function characterItems(Request $request, $requestType) + { + $type = "Hat"; + switch ($requestType) { + case "hats": + default: + $type = "Hat"; + break; + case "shirts": + $type = "Shirt"; + break; + case "pants": + $type = "Pants"; + break; + case "tshirts": + $type = "T-Shirt"; + break; + case "images": + $type = "Image"; + break; + case "faces": + $type = "Face"; + break; + case "gears": + $type = "Gear"; + break; + case "heads": + $type = "Head"; + break; + case "packages": + $type = "Package"; + break; + } + + $items = DB::table('owned_items') + ->join('items', 'owned_items.item_id', '=', 'items.id') + ->where('owned_items.user_id', $request->user()->id) + ->where('items.type', $type) + ->where('items.approved', 1) + ->select('items.id', 'items.thumbnail_url', 'items.name', 'items.type', 'owned_items.wearing') + ->orderBy('owned_items.created_at', 'desc') + ->get(); + + return view('users.characteritems', ['items' => $items, 'type' => $type]); + } + + public function toggleWearing(Request $request, $id) + { + $item = Item::findOrFail($id); + $ownedItem = OwnedItems::where(['item_id' => $id, 'user_id' => $request->user()->id])->firstOrFail(); + + $wearingItems = DB::table('owned_items') + ->join('items', 'owned_items.item_id', '=', 'items.id') + ->where('owned_items.user_id', $request->user()->id) + ->where('owned_items.wearing', true) + ->where('items.type', $item->type) + ->select('owned_items.id', 'owned_items.item_id', 'owned_items.wearing') + ->get(); + + if (!$ownedItem->wearing) { + if ($item->type == "Hat") { + if (count($wearingItems) >= 5) { + $wearingItem = OwnedItems::where(['id' => $wearingItems[0]->id, 'wearing' => true])->first(); + + if ($wearingItem) { + $wearingItem->wearing = false; + $wearingItem->save(); + } + } + } else { + foreach ($wearingItems as $wearingItem) { + $wearingItem = OwnedItems::where(['id' => $wearingItem->id, 'user_id' => $request->user()->id])->first(); + $wearingItem->wearing = false; + $wearingItem->save(); + } + } + + $ownedItem->wearing = true; + $ownedItem->save(); + } else { + $ownedItem->wearing = false; + $ownedItem->save(); + } + + return back(); + } + + public function regenThumbnail(Request $request) + { + $user = $request->user(); + $userInQueue = RenderQueue::where(['type' => 'user', 'target_id' => $user->id])->first(); + + if ($userInQueue) { + return 'INQUEUE'; + } else { + RenderQueue::create([ + 'type' => 'user', + 'target_id' => $user->id + ]); + + return 'OK'; + } + } + + public function download(Request $request) + { + return view('client.download'); + } + + public function savesettings(Request $request) + { + $user = $request->user(); + + $request->validate([ + 'blurb' => ['max:700'] + ]); + + $user->blurb = $request->blurb; + $user->save(); + + return redirect(route('users.settings'))->with('message', 'Settings saved successfully.'); + } +} diff --git a/app/Http/Controllers/WelcomeController.php b/app/Http/Controllers/WelcomeController.php new file mode 100644 index 0000000..9338f61 --- /dev/null +++ b/app/Http/Controllers/WelcomeController.php @@ -0,0 +1,39 @@ + 1])->latest()->take(4)->get(); + $userCount = User::count(); + $renderQueueCount = RenderQueue::count(); + $threadCount = ForumThread::count(); + $postCount = ForumPost::count(); + $totalPosts = $threadCount + $postCount; + $itemCount = Item::count(); + $newestUser = User::orderBy('joined', 'DESC')->first(); + + return view('welcome')->with( + [ + 'announcements' => $announcements, + 'userCount' => $userCount, + 'renderQueueCount' => $renderQueueCount, + 'threadCount' => $threadCount, + 'postCount' => $postCount, + 'totalPosts' => $totalPosts, + 'itemCount' => $itemCount, + 'newestUser' => $newestUser + ] + ); + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php new file mode 100644 index 0000000..dd23df9 --- /dev/null +++ b/app/Http/Kernel.php @@ -0,0 +1,70 @@ + [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + // \Illuminate\Session\Middleware\AuthenticateSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + \App\Http\Middleware\UserOnlineMiddleware::class, + \App\Http\Middleware\IsBanned::class, + \App\Http\Middleware\DailyMoneyMiddleware::class, + ], + + 'api' => [ + 'throttle:api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => \App\Http\Middleware\Authenticate::class, + 'admin' => \App\Http\Middleware\IsAdmin::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + ]; +} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..704089a --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,21 @@ +expectsJson()) { + return route('login'); + } + } +} diff --git a/app/Http/Middleware/DailyMoneyMiddleware.php b/app/Http/Middleware/DailyMoneyMiddleware.php new file mode 100644 index 0000000..6bf7a8a --- /dev/null +++ b/app/Http/Middleware/DailyMoneyMiddleware.php @@ -0,0 +1,31 @@ +last_online = Carbon::now(); + if(strtotime(Auth::user()->last_daily_reward) < Carbon::now()->timestamp - (86400)) { + Auth::user()->money = Auth::user()->money + config('app.daily_reward'); + Auth::user()->last_daily_reward = Carbon::now(); + } + Auth::user()->save(); + } + return $next($request); + } +} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 0000000..033136a --- /dev/null +++ b/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ +user()->admin) { + return redirect('/home'); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/IsBanned.php b/app/Http/Middleware/IsBanned.php new file mode 100644 index 0000000..899e59b --- /dev/null +++ b/app/Http/Middleware/IsBanned.php @@ -0,0 +1,31 @@ +banned) { + if (Route::currentRouteName() != "users.banned" and Route::currentRouteName() != "users.unban") { + return redirect('/banned'); + } + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/app/Http/Middleware/PreventRequestsDuringMaintenance.php new file mode 100644 index 0000000..e4956d0 --- /dev/null +++ b/app/Http/Middleware/PreventRequestsDuringMaintenance.php @@ -0,0 +1,17 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..a8a252d --- /dev/null +++ b/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,19 @@ +allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php new file mode 100644 index 0000000..a3b6aef --- /dev/null +++ b/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,23 @@ +id, true, Carbon::now()->addMinutes(1)); + + if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) { + $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"]; + } + + $ip = $_SERVER['REMOTE_ADDR']; + + $user = User::find(Auth::user()->id); + $user->update(['last_online' => (new \DateTime())->format("Y-m-d H:i:s"), 'last_ip' => $ip]); + if ($user->register_ip == "0.0.0.0") { + $user->update(['register_ip' => $ip]); + } + } + return $next($request); + } +} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 0000000..4fcf2d6 --- /dev/null +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,17 @@ +belongsTo('App\Models\User', 'user_id'); + } +} diff --git a/app/Models/ForumCategory.php b/app/Models/ForumCategory.php new file mode 100644 index 0000000..57915e1 --- /dev/null +++ b/app/Models/ForumCategory.php @@ -0,0 +1,28 @@ +hasMany('App\Models\ForumThread', 'category_id'); + } + + public function posts() + { + return $this->hasMany('App\Models\ForumPost', 'category_id'); + } +} diff --git a/app/Models/ForumPost.php b/app/Models/ForumPost.php new file mode 100644 index 0000000..2544892 --- /dev/null +++ b/app/Models/ForumPost.php @@ -0,0 +1,34 @@ +belongsTo('App\Models\ForumCategory', 'category_id'); + } + + public function thread() + { + return $this->belongsTo('App\Models\ForumThread', 'thread_id'); + } + + public function user() + { + return $this->belongsTo('App\Models\User', 'user_id'); + } +} diff --git a/app/Models/ForumThread.php b/app/Models/ForumThread.php new file mode 100644 index 0000000..0237299 --- /dev/null +++ b/app/Models/ForumThread.php @@ -0,0 +1,35 @@ +belongsTo('App\Models\ForumCategory', 'category_id'); + } + + public function replies() + { + return $this->hasMany('App\Models\ForumPost', 'thread_id'); + } + + public function user() + { + return $this->belongsTo('App\Models\User', 'user_id'); + } +} diff --git a/app/Models/GameToken.php b/app/Models/GameToken.php new file mode 100644 index 0000000..776aff1 --- /dev/null +++ b/app/Models/GameToken.php @@ -0,0 +1,21 @@ +belongsTo('App\Models\User', 'user_id'); + } + + public function server() { + return $this->belongsTo('App\Models\Server', 'server_id'); + } +} diff --git a/app/Models/InviteKey.php b/app/Models/InviteKey.php new file mode 100644 index 0000000..8ddfc63 --- /dev/null +++ b/app/Models/InviteKey.php @@ -0,0 +1,22 @@ +belongsTo('App\Models\User', 'creator'); + } +} diff --git a/app/Models/Item.php b/app/Models/Item.php new file mode 100644 index 0000000..d9cbb9a --- /dev/null +++ b/app/Models/Item.php @@ -0,0 +1,43 @@ +belongsTo('App\Models\User', 'creator'); + } + + public function isXmlAsset() + { + return $this->type == "Hat" || $this->type == "Model" || $this->type == "Gear" || $this->type == "Package" || $this->type == "Head"; + } + + public function getXmlContents() + { + if (Storage::disk('public')->exists('items/' . $this->id)) { + return Storage::disk('public')->get('items/' . $this->id); + } else { + return false; + } + } +} diff --git a/app/Models/OwnedItems.php b/app/Models/OwnedItems.php new file mode 100644 index 0000000..01e8b37 --- /dev/null +++ b/app/Models/OwnedItems.php @@ -0,0 +1,25 @@ +belongsTo('App\Models\User', 'user_id'); + } + + public function item() { + return $this->belongsTo('App\Models\Item', 'item_id'); + } +} diff --git a/app/Models/RenderQueue.php b/app/Models/RenderQueue.php new file mode 100644 index 0000000..221b0ba --- /dev/null +++ b/app/Models/RenderQueue.php @@ -0,0 +1,28 @@ +belongsTo('App\Models\User', 'target_id'); + } + + public function item() + { + return $this->belongsTo('App\Models\Item', 'target_id'); + } +} diff --git a/app/Models/Server.php b/app/Models/Server.php new file mode 100644 index 0000000..1d430e8 --- /dev/null +++ b/app/Models/Server.php @@ -0,0 +1,25 @@ +belongsTo('App\Models\User', 'creator'); + } +} diff --git a/app/Models/User.php b/app/Models/User.php new file mode 100644 index 0000000..6a19b67 --- /dev/null +++ b/app/Models/User.php @@ -0,0 +1,89 @@ + 'datetime', + ]; + + protected $dates = [ + 'banned_until', + 'joined', + 'last_online' + ]; + + public function threads() + { + return $this->hasMany('App\Models\ForumThread', 'user_id'); + } + + public function posts() + { + return $this->hasMany('App\Models\ForumPost', 'user_id'); + } + + public function getReadableMoney() + { + $money = $this->money; + + if ($money < 100000) { + // Anything less than one hundred thousand + $money_format = number_format($money); + } else if ($money < 1000000) { + // Anything less than a million + $money_format = number_format($money / 1000, 0) . 'K+'; + } else if ($money < 1000000000) { + // Anything less than a billion + $money_format = number_format($money / 1000000, 0) . 'M+'; + } else { + // At least a billion + $money_format = number_format($money / 1000000000, 1) . 'B+'; + } + + return $money_format; + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..43cc470 --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,31 @@ +user()->admin; + }); + } +} diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php new file mode 100644 index 0000000..ce74491 --- /dev/null +++ b/app/Providers/AuthServiceProvider.php @@ -0,0 +1,30 @@ + 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + } +} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 0000000..395c518 --- /dev/null +++ b/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ + [ + SendEmailVerificationNotification::class, + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + // + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..3bd3c81 --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,63 @@ +configureRateLimiting(); + + $this->routes(function () { + Route::prefix('api') + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/api.php')); + + Route::middleware('web') + ->namespace($this->namespace) + ->group(base_path('routes/web.php')); + }); + } + + /** + * Configure the rate limiters for the application. + * + * @return void + */ + protected function configureRateLimiting() + { + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip()); + }); + } +} diff --git a/app/Rules/AssetTypesRule.php b/app/Rules/AssetTypesRule.php new file mode 100644 index 0000000..35a7300 --- /dev/null +++ b/app/Rules/AssetTypesRule.php @@ -0,0 +1,44 @@ +first(); + + if (!$invitekey) { + return false; + } + + if ($invitekey->uses < 1) { + return false; + } + + return true; + } + + /** + * Get the validation error message. + * + * @return string + */ + public function message() + { + return 'This invite key is invalid.'; + } +} diff --git a/artisan b/artisan new file mode 100644 index 0000000..5c23e2e --- /dev/null +++ b/artisan @@ -0,0 +1,53 @@ +#!/usr/bin/env php +make(Illuminate\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running, we will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..037e17d --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..9f48924 --- /dev/null +++ b/composer.json @@ -0,0 +1,67 @@ +{ + "name": "laravel/laravel", + "type": "project", + "description": "The Laravel Framework.", + "keywords": ["framework", "laravel"], + "license": "MIT", + "require": { + "php": "^7.3|^8.0", + "abeautifulsite/simpleimage": "^3.6", + "fideloper/proxy": "^4.4", + "fruitcake/laravel-cors": "^2.0", + "guzzlehttp/guzzle": "^7.0.1", + "laravel/framework": "^8.12", + "laravel/tinker": "^2.5", + "laravel/ui": "^3.2", + "parsedown/laravel": "^1.2", + "pharaonic/laravel-readable": "^1.0" + }, + "require-dev": { + "facade/ignition": "^2.5", + "fakerphp/faker": "^1.9.1", + "laravel/sail": "^1.0.1", + "mockery/mockery": "^1.4.2", + "nunomaduro/collision": "^5.0", + "phpunit/phpunit": "^9.3.3" + }, + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/" + }, + "files": [ + "app/External/CloudflareHelper.php", + "app/External/SimpleImage.class.php" + ] + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + }, + "extra": { + "laravel": { + "dont-discover": [] + } + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true + }, + "minimum-stability": "dev", + "prefer-stable": true +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..ef25b5f --- /dev/null +++ b/composer.lock @@ -0,0 +1,8059 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "f33b548dfdd8babed34a7560dbebdb9f", + "packages": [ + { + "name": "abeautifulsite/simpleimage", + "version": "3.6.3", + "source": { + "type": "git", + "url": "https://github.com/claviska/SimpleImage.git", + "reference": "21b6f4bf4ef1927158b3e29bd0c2d99c6681c750" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/claviska/SimpleImage/zipball/21b6f4bf4ef1927158b3e29bd0c2d99c6681c750", + "reference": "21b6f4bf4ef1927158b3e29bd0c2d99c6681c750", + "shasum": "" + }, + "require": { + "ext-gd": "*", + "league/color-extractor": "0.3.*", + "php": ">=5.6.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "claviska": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Cory LaViska", + "homepage": "http://www.abeautifulsite.net/", + "role": "Developer" + } + ], + "description": "A PHP class that makes working with images as simple as possible.", + "support": { + "issues": "https://github.com/claviska/SimpleImage/issues", + "source": "https://github.com/claviska/SimpleImage/tree/3.6.3" + }, + "funding": [ + { + "url": "https://github.com/claviska", + "type": "github" + } + ], + "time": "2021-04-20T12:18:18+00:00" + }, + { + "name": "asm89/stack-cors", + "version": "v2.0.3", + "source": { + "type": "git", + "url": "https://github.com/asm89/stack-cors.git", + "reference": "9cb795bf30988e8c96dd3c40623c48a877bc6714" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/asm89/stack-cors/zipball/9cb795bf30988e8c96dd3c40623c48a877bc6714", + "reference": "9cb795bf30988e8c96dd3c40623c48a877bc6714", + "shasum": "" + }, + "require": { + "php": "^7.0|^8.0", + "symfony/http-foundation": "~2.7|~3.0|~4.0|~5.0", + "symfony/http-kernel": "~2.7|~3.0|~4.0|~5.0" + }, + "require-dev": { + "phpunit/phpunit": "^6|^7|^8|^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Asm89\\Stack\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander", + "email": "iam.asm89@gmail.com" + } + ], + "description": "Cross-origin resource sharing library and stack middleware", + "homepage": "https://github.com/asm89/stack-cors", + "keywords": [ + "cors", + "stack" + ], + "support": { + "issues": "https://github.com/asm89/stack-cors/issues", + "source": "https://github.com/asm89/stack-cors/tree/v2.0.3" + }, + "time": "2021-03-11T06:42:03+00:00" + }, + { + "name": "brick/math", + "version": "0.9.2", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", + "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", + "vimeo/psalm": "4.3.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.9.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/brick/math", + "type": "tidelift" + } + ], + "time": "2021-01-20T22:51:39+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "e04ff030d24a33edc2421bef305e32919dd78fc3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/e04ff030d24a33edc2421bef305e32919dd78fc3", + "reference": "e04ff030d24a33edc2421bef305e32919dd78fc3", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^3.14" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.0" + }, + "time": "2021-01-01T22:08:42+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/9cf661f4eb38f7c881cac67c75ea9b00bf97b210", + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^7.0", + "phpstan/phpstan": "^0.11", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-strict-rules": "^0.11", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2020-05-29T15:13:26+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11.8", + "phpunit/phpunit": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2020-05-25T17:44:05+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.1.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c", + "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.7.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-webmozart-assert": "^0.12.7", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.1.0" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2020-11-24T19:55:57+00:00" + }, + { + "name": "egulias/email-validator", + "version": "2.1.25", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" + }, + "require-dev": { + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/2.1.25" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2020-12-29T14:50:06+00:00" + }, + { + "name": "erusev/parsedown", + "version": "1.7.4", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "type": "library", + "autoload": { + "psr-0": { + "Parsedown": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "Parser for Markdown.", + "homepage": "http://parsedown.org", + "keywords": [ + "markdown", + "parser" + ], + "support": { + "issues": "https://github.com/erusev/parsedown/issues", + "source": "https://github.com/erusev/parsedown/tree/1.7.x" + }, + "time": "2019-12-30T22:54:17+00:00" + }, + { + "name": "fideloper/proxy", + "version": "4.4.1", + "source": { + "type": "git", + "url": "https://github.com/fideloper/TrustedProxy.git", + "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/c073b2bd04d1c90e04dc1b787662b558dd65ade0", + "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0", + "php": ">=5.4.0" + }, + "require-dev": { + "illuminate/http": "^5.0|^6.0|^7.0|^8.0|^9.0", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Fideloper\\Proxy\\TrustedProxyServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Fideloper\\Proxy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Fidao", + "email": "fideloper@gmail.com" + } + ], + "description": "Set trusted proxies for Laravel", + "keywords": [ + "load balancing", + "proxy", + "trusted proxy" + ], + "support": { + "issues": "https://github.com/fideloper/TrustedProxy/issues", + "source": "https://github.com/fideloper/TrustedProxy/tree/4.4.1" + }, + "time": "2020-10-22T13:48:01+00:00" + }, + { + "name": "fruitcake/laravel-cors", + "version": "v2.0.4", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/laravel-cors.git", + "reference": "a8ccedc7ca95189ead0e407c43b530dc17791d6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/a8ccedc7ca95189ead0e407c43b530dc17791d6a", + "reference": "a8ccedc7ca95189ead0e407c43b530dc17791d6a", + "shasum": "" + }, + "require": { + "asm89/stack-cors": "^2.0.1", + "illuminate/contracts": "^6|^7|^8|^9", + "illuminate/support": "^6|^7|^8|^9", + "php": ">=7.2", + "symfony/http-foundation": "^4|^5", + "symfony/http-kernel": "^4.3.4|^5" + }, + "require-dev": { + "laravel/framework": "^6|^7|^8", + "orchestra/testbench-dusk": "^4|^5|^6|^7", + "phpunit/phpunit": "^6|^7|^8|^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + }, + "laravel": { + "providers": [ + "Fruitcake\\Cors\\CorsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Laravel application", + "keywords": [ + "api", + "cors", + "crossdomain", + "laravel" + ], + "support": { + "issues": "https://github.com/fruitcake/laravel-cors/issues", + "source": "https://github.com/fruitcake/laravel-cors/tree/v2.0.4" + }, + "funding": [ + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2021-04-26T11:24:25+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/7e279d2cd5d7fbb156ce46daada972355cea27bb", + "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb", + "shasum": "" + }, + "require": { + "php": "^7.0|^8.0", + "phpoption/phpoption": "^1.7.3" + }, + "require-dev": { + "phpunit/phpunit": "^6.5|^7.5|^8.5|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2020-04-13T13:17:36+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "7008573787b430c1c1f650e3722d9bba59967628" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628", + "reference": "7008573787b430c1c1f650e3722d9bba59967628", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.4", + "guzzlehttp/psr7": "^1.7 || ^2.0", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "psr/log": "^1.1" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.3-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.3.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://github.com/alexeyshockov", + "type": "github" + }, + { + "url": "https://github.com/gmponos", + "type": "github" + } + ], + "time": "2021-03-23T11:33:13+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.4.1" + }, + "time": "2021-03-07T09:25:29+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "1dc8d9cba3897165e16d12bb13d813afb1eb3fe7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/1dc8d9cba3897165e16d12bb13d813afb1eb3fe7", + "reference": "1dc8d9cba3897165e16d12bb13d813afb1eb3fe7", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.0.0" + }, + "time": "2021-06-30T20:03:07+00:00" + }, + { + "name": "laravel/framework", + "version": "v8.52.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "8fe9877d52e25f8aed36c51734e5a8510be967e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/8fe9877d52e25f8aed36c51734e5a8510be967e6", + "reference": "8fe9877d52e25f8aed36c51734e5a8510be967e6", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^1.4|^2.0", + "dragonmantank/cron-expression": "^3.0.2", + "egulias/email-validator": "^2.1.10", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "league/commonmark": "^1.3|^2.0", + "league/flysystem": "^1.1", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.31", + "opis/closure": "^3.6", + "php": "^7.3|^8.0", + "psr/container": "^1.0", + "psr/simple-cache": "^1.0", + "ramsey/uuid": "^4.0", + "swiftmailer/swiftmailer": "^6.0", + "symfony/console": "^5.1.4", + "symfony/error-handler": "^5.1.4", + "symfony/finder": "^5.1.4", + "symfony/http-foundation": "^5.1.4", + "symfony/http-kernel": "^5.1.4", + "symfony/mime": "^5.1.4", + "symfony/process": "^5.1.4", + "symfony/routing": "^5.1.4", + "symfony/var-dumper": "^5.1.4", + "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "vlucas/phpdotenv": "^5.2", + "voku/portable-ascii": "^1.4.8" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.155", + "doctrine/dbal": "^2.6|^3.0", + "filp/whoops": "^2.8", + "guzzlehttp/guzzle": "^6.5.5|^7.0.1", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "^1.4.2", + "orchestra/testbench-core": "^6.23", + "pda/pheanstalk": "^4.0", + "phpunit/phpunit": "^8.5.8|^9.3.3", + "predis/predis": "^1.1.2", + "symfony/cache": "^5.1.4" + }, + "suggest": { + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).", + "brianium/paratest": "Required to run tests in parallel (^6.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6|^3.0).", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.8).", + "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "mockery/mockery": "Required to use mocking (^1.4.2).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.5.8|^9.3.3).", + "predis/predis": "Required to use the predis connector (^1.1.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.1.4).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^5.1.4).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", + "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2021-07-27T13:03:29+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.6.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "04ad32c1a3328081097a181875733fa51f402083" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/04ad32c1a3328081097a181875733fa51f402083", + "reference": "04ad32c1a3328081097a181875733fa51f402083", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0", + "illuminate/contracts": "^6.0|^7.0|^8.0", + "illuminate/support": "^6.0|^7.0|^8.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.10.4", + "symfony/var-dumper": "^4.3.4|^5.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.6.1" + }, + "time": "2021-03-02T16:53:12+00:00" + }, + { + "name": "laravel/ui", + "version": "v3.3.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/ui.git", + "reference": "07d725813350c695c779382cbd6dac0ab8665537" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/ui/zipball/07d725813350c695c779382cbd6dac0ab8665537", + "reference": "07d725813350c695c779382cbd6dac0ab8665537", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.42", + "illuminate/filesystem": "^8.42", + "illuminate/support": "^8.42", + "illuminate/validation": "^8.42", + "php": "^7.3|^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Ui\\UiServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Ui\\": "src/", + "Illuminate\\Foundation\\Auth\\": "auth-backend/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel UI utilities and presets.", + "keywords": [ + "laravel", + "ui" + ], + "support": { + "source": "https://github.com/laravel/ui/tree/v3.3.0" + }, + "time": "2021-05-25T16:45:33+00:00" + }, + { + "name": "league/color-extractor", + "version": "0.3.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/color-extractor.git", + "reference": "837086ec60f50c84c611c613963e4ad2e2aec806" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/color-extractor/zipball/837086ec60f50c84c611c613963e4ad2e2aec806", + "reference": "837086ec60f50c84c611c613963e4ad2e2aec806", + "shasum": "" + }, + "require": { + "ext-gd": "*", + "php": ">=5.4.0" + }, + "replace": { + "matthecat/colorextractor": "*" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2", + "phpunit/phpunit": "~5" + }, + "type": "library", + "autoload": { + "psr-4": { + "": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathieu Lechat", + "email": "math.lechat@gmail.com", + "homepage": "http://matthecat.com", + "role": "Developer" + } + ], + "description": "Extract colors from an image as a human would do.", + "homepage": "https://github.com/thephpleague/color-extractor", + "keywords": [ + "color", + "extract", + "human", + "image", + "palette" + ], + "support": { + "issues": "https://github.com/thephpleague/color-extractor/issues", + "source": "https://github.com/thephpleague/color-extractor/tree/master" + }, + "time": "2016-12-15T09:30:02+00:00" + }, + { + "name": "league/commonmark", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "167142baf9a6b946f99ad9325b06028606f8238e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/167142baf9a6b946f99ad9325b06028606f8238e", + "reference": "167142baf9a6b946f99ad9325b06028606f8238e", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/polyfill-php80": "^1.15" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4", + "phpstan/phpstan": "^0.12.88", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark", + "type": "custom" + }, + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://www.patreon.com/colinodell", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2021-07-24T20:12:58+00:00" + }, + { + "name": "league/config", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "20d42d88f12a76ff862e17af4f14a5a4bbfd0925" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/20d42d88f12a76ff862e17af4f14a5a4bbfd0925", + "reference": "20d42d88f12a76ff862e17af4f14a5a4bbfd0925", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.90", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2021-06-19T15:52:37+00:00" + }, + { + "name": "league/flysystem", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f3ad69181b8afed2c9edf7be5a2918144ff4ea32", + "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/mime-type-detection": "^1.3", + "php": "^7.2.5 || ^8.0" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" + }, + "require-dev": { + "phpspec/prophecy": "^1.11.1", + "phpunit/phpunit": "^8.5.8" + }, + "suggest": { + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Filesystem abstraction: Many filesystems, one API.", + "keywords": [ + "Cloud Files", + "WebDAV", + "abstraction", + "aws", + "cloud", + "copy.com", + "dropbox", + "file systems", + "files", + "filesystem", + "filesystems", + "ftp", + "rackspace", + "remote", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/1.1.4" + }, + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], + "time": "2021-06-23T21:56:05+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", + "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.18", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.7.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2021-01-18T20:58:21+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.3.2", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "71312564759a7db5b789296369c1a264efc43aad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/71312564759a7db5b789296369c1a264efc43aad", + "reference": "71312564759a7db5b789296369c1a264efc43aad", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7", + "graylog2/gelf-php": "^1.4.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpspec/prophecy": "^1.6.1", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5", + "predis/predis": "^1.1", + "rollbar/rollbar": "^1.3", + "ruflin/elastica": ">=0.90 <7.0.1", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.3.2" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2021-07-23T07:42:52+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.51.1", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922", + "reference": "8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0" + }, + "require-dev": { + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", + "kylekatarnls/multi-tester": "^2.0", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.54", + "phpunit/phpunit": "^7.5.20 || ^8.5.14", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2021-07-28T13:16:28+00:00" + }, + { + "name": "nette/schema", + "version": "v1.2.1", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "f5ed39fc96358f922cedfd1e516f0dadf5d2be0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/f5ed39fc96358f922cedfd1e516f0dadf5d2be0d", + "reference": "f5ed39fc96358f922cedfd1e516f0dadf5d2be0d", + "shasum": "" + }, + "require": { + "nette/utils": "^3.1.4 || ^4.0", + "php": ">=7.1 <8.1" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^0.12", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.1" + }, + "time": "2021-03-04T17:51:11+00:00" + }, + { + "name": "nette/utils", + "version": "v3.2.2", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/967cfc4f9a1acd5f1058d76715a424c53343c20c", + "reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c", + "shasum": "" + }, + "require": { + "php": ">=7.2 <8.1" + }, + "conflict": { + "nette/di": "<3.0.6" + }, + "require-dev": { + "nette/tester": "~2.0", + "phpstan/phpstan": "^0.12", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.2.2" + }, + "time": "2021-03-03T22:53:25+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.12.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "6608f01670c3cc5079e18c1dab1104e002579143" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6608f01670c3cc5079e18c1dab1104e002579143", + "reference": "6608f01670c3cc5079e18c1dab1104e002579143", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.12.0" + }, + "time": "2021-07-21T10:44:31+00:00" + }, + { + "name": "opis/closure", + "version": "3.6.2", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6", + "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0 || ^8.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Opis\\Closure\\": "src/" + }, + "files": [ + "functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "support": { + "issues": "https://github.com/opis/closure/issues", + "source": "https://github.com/opis/closure/tree/3.6.2" + }, + "time": "2021-04-09T13:42:10+00:00" + }, + { + "name": "parsedown/laravel", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/parsedown/laravel.git", + "reference": "c713ffe28c76730754389180e86e93e8e84087e7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/parsedown/laravel/zipball/c713ffe28c76730754389180e86e93e8e84087e7", + "reference": "c713ffe28c76730754389180e86e93e8e84087e7", + "shasum": "" + }, + "require": { + "erusev/parsedown": "^1.7", + "php": ">=7.1.3" + }, + "require-dev": { + "orchestra/testbench": "^3.8", + "php": ">=7.2", + "phpunit/phpunit": "^8.3" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Parsedown\\Providers\\ParsedownServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Support/helpers.php" + ], + "psr-4": { + "Parsedown\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Agostini", + "email": "edu.agostini@gmail.com" + } + ], + "description": "Official Parsedown's Laravel Wrapper.", + "homepage": "http://parsedown.org", + "keywords": [ + "laravel", + "parsedown" + ], + "support": { + "issues": "https://github.com/parsedown/laravel/issues", + "source": "https://github.com/parsedown/laravel" + }, + "time": "2020-01-07T02:12:55+00:00" + }, + { + "name": "pharaonic/laravel-readable", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/Pharaonic/laravel-readable.git", + "reference": "42bc9ece47c98ae07397bb8ac77333b71fb32097" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Pharaonic/laravel-readable/zipball/42bc9ece47c98ae07397bb8ac77333b71fb32097", + "reference": "42bc9ece47c98ae07397bb8ac77333b71fb32097", + "shasum": "" + }, + "require": { + "laravel/framework": ">=6.0", + "php": ">=7.2" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Pharaonic\\Laravel\\Readable\\ReadableServiceProvider" + ], + "aliases": { + "Readable": "Pharaonic\\Laravel\\Readable\\Readable" + } + } + }, + "autoload": { + "psr-4": { + "Pharaonic\\Laravel\\Readable\\": "src" + }, + "files": [ + "src/Helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raggi", + "email": "support@pharaonic.io", + "homepage": "https://pharaonic.io" + } + ], + "description": "Laravel - Readable Number (Integer|decimal) & DateTime & Time Length & File Size.", + "keywords": [ + "human readable", + "laravel", + "pharaonic", + "php", + "readable" + ], + "support": { + "issues": "https://github.com/Pharaonic/laravel-readable/issues", + "source": "https://github.com/Pharaonic/laravel-readable/tree/1.0.4" + }, + "time": "2021-05-09T13:30:55+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.7.5", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.7.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2020-07-20T17:29:33+00:00" + }, + { + "name": "psr/container", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.1" + }, + "time": "2021-03-05T17:36:06+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/master" + }, + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.10.8", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "e4573f47750dd6c92dca5aee543fa77513cbd8d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/e4573f47750dd6c92dca5aee543fa77513cbd8d3", + "reference": "e4573f47750dd6c92dca5aee543fa77513cbd8d3", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3", + "php": "^8.0 || ^7.0 || ^5.5.9", + "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10", + "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "hoa/console": "3.17.*" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", + "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.10.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.10.8" + }, + "time": "2021-04-10T16:23:39+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", + "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8" + }, + "require-dev": { + "captainhook/captainhook": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "ergebnis/composer-normalize": "^2.6", + "fakerphp/faker": "^1.5", + "hamcrest/hamcrest-php": "^2", + "jangregor/phpstan-prophecy": "^0.8", + "mockery/mockery": "^1.3", + "phpstan/extension-installer": "^1", + "phpstan/phpstan": "^0.12.32", + "phpstan/phpstan-mockery": "^0.12.5", + "phpstan/phpstan-phpunit": "^0.12.11", + "phpunit/phpunit": "^8.5 || ^9", + "psy/psysh": "^0.10.4", + "slevomat/coding-standard": "^6.3", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP 7.2+ library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.1.3" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2021-01-21T17:40:04+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.1.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "cd4032040a750077205918c86049aa0f43d22947" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/cd4032040a750077205918c86049aa0f43d22947", + "reference": "cd4032040a750077205918c86049aa0f43d22947", + "shasum": "" + }, + "require": { + "brick/math": "^0.8 || ^0.9", + "ext-json": "*", + "php": "^7.2 || ^8", + "ramsey/collection": "^1.0", + "symfony/polyfill-ctype": "^1.8" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "codeception/aspect-mock": "^3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7.0", + "doctrine/annotations": "^1.8", + "goaop/framework": "^2", + "mockery/mockery": "^1.3", + "moontoast/math": "^1.1", + "paragonie/random-lib": "^2", + "php-mock/php-mock-mockery": "^1.3", + "php-mock/php-mock-phpunit": "^2.5", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^0.17.1", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5", + "psy/psysh": "^0.10.0", + "slevomat/coding-standard": "^6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "3.9.4" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Uuid\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "homepage": "https://github.com/ramsey/uuid", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "rss": "https://github.com/ramsey/uuid/releases.atom", + "source": "https://github.com/ramsey/uuid" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + } + ], + "time": "2020-08-18T17:17:46+00:00" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "15f7faf8508e04471f666633addacf54c0ab5933" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/15f7faf8508e04471f666633addacf54c0ab5933", + "reference": "15f7faf8508e04471f666633addacf54c0ab5933", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.0|^3.1", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.0" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "https://swiftmailer.symfony.com", + "keywords": [ + "email", + "mail", + "mailer" + ], + "support": { + "issues": "https://github.com/swiftmailer/swiftmailer/issues", + "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.2.7" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", + "type": "tidelift" + } + ], + "time": "2021-03-09T12:30:35+00:00" + }, + { + "name": "symfony/console", + "version": "v5.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "ebd610dacd40d75b6a12bf64b5ccd494fc7d6ab1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/ebd610dacd40d75b6a12bf64b5ccd494fc7d6ab1", + "reference": "ebd610dacd40d75b6a12bf64b5ccd494fc7d6ab1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-26T16:33:26+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v5.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "7fb120adc7f600a59027775b224c13a33530dd90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/7fb120adc7f600a59027775b224c13a33530dd90", + "reference": "7fb120adc7f600a59027775b224c13a33530dd90", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v5.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-21T12:38:00+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-03-23T23:28:01+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v5.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "281f6c4660bcf5844bb0346fe3a4664722fe4c73" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/281f6c4660bcf5844bb0346fe3a4664722fe4c73", + "reference": "281f6c4660bcf5844bb0346fe3a4664722fe4c73", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^4.4|^5.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v5.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-23T15:55:36+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "f2fd2208157553874560f3645d4594303058c4bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f2fd2208157553874560f3645d4594303058c4bd", + "reference": "f2fd2208157553874560f3645d4594303058c4bd", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher-contracts": "^2", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/error-handler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^4.4|^5.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-23T15:55:36+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11", + "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-03-23T23:28:01+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "17f50e06018baec41551a71a15731287dbaab186" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/17f50e06018baec41551a71a15731287dbaab186", + "reference": "17f50e06018baec41551a71a15731287dbaab186", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-23T15:54:19+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7e82f6084d7cae521a75ef2cb5c9457bbda785f4", + "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-04-11T23:07:08+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v5.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "d6602aca7d3e11f401a0b24f43b611c530abfad3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d6602aca7d3e11f401a0b24f43b611c530abfad3", + "reference": "d6602aca7d3e11f401a0b24f43b611c530abfad3", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v5.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-23T15:55:36+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v5.3.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "9eb3ee3cb6c69e12ba5770665b89fe82f0b99033" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9eb3ee3cb6c69e12ba5770665b89fe82f0b99033", + "reference": "9eb3ee3cb6c69e12ba5770665b89fe82f0b99033", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2", + "symfony/deprecation-contracts": "^2.1", + "symfony/error-handler": "^4.4|^5.0", + "symfony/event-dispatcher": "^5.0", + "symfony/http-client-contracts": "^1.1|^2", + "symfony/http-foundation": "^5.3", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/browser-kit": "<4.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<5.3", + "symfony/doctrine-bridge": "<5.0", + "symfony/form": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/config": "^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dependency-injection": "^5.3", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v5.3.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-27T04:39:22+00:00" + }, + { + "name": "symfony/mime", + "version": "v5.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "633e4e8afe9e529e5599d71238849a4218dd497b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/633e4e8afe9e529e5599d71238849a4218dd497b", + "reference": "633e4e8afe9e529e5599d71238849a4218dd497b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<4.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.1", + "symfony/property-info": "^4.4|^5.1", + "symfony/serializer": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v5.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-21T12:40:44+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/63b5bb7db83e5673936d6e3b8b3e022ff6474933", + "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T09:27:20+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/24b72c6baa32c746a4d0840147c9715e42bb68ab", + "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T09:17:38+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", + "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T09:27:20+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1", + "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T09:27:20+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T09:17:38+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0", + "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/process", + "version": "v5.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "d16634ee55b895bd85ec714dadc58e4428ecf030" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/d16634ee55b895bd85ec714dadc58e4428ecf030", + "reference": "d16634ee55b895bd85ec714dadc58e4428ecf030", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v5.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-23T15:54:19+00:00" + }, + { + "name": "symfony/routing", + "version": "v5.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "0a35d2f57d73c46ab6d042ced783b81d09a624c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/0a35d2f57d73c46ab6d042ced783b81d09a624c4", + "reference": "0a35d2f57d73c46ab6d042ced783b81d09a624c4", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<5.3", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.3", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v5.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-23T15:55:36+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-04-01T10:43:52+00:00" + }, + { + "name": "symfony/string", + "version": "v5.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1", + "reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-06-27T11:44:38+00:00" + }, + { + "name": "symfony/translation", + "version": "v5.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "d89ad7292932c2699cbe4af98d72c5c6bbc504c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/d89ad7292932c2699cbe4af98d72c5c6bbc504c1", + "reference": "d89ad7292932c2699cbe4af98d72c5c6bbc504c1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation-contracts": "^2.3" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.3" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v5.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-25T09:39:16+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "95c812666f3e91db75385749fe219c5e494c7f95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95", + "reference": "95c812666f3e91db75385749fe219c5e494c7f95", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-03-23T23:28:01+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v5.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "a895407f7cf55da42aa1480935d707684b690bfc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a895407f7cf55da42aa1480935d707684b690bfc", + "reference": "a895407f7cf55da42aa1480935d707684b690bfc", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v5.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-23T15:55:36+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.3", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/b43b05cf43c1b6d849478965062b6ef73e223bb5", + "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.3" + }, + "time": "2020-07-13T06:12:54+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.3.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/b3eac5c7ac896e52deab4a99068e3f4ab12d9e56", + "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.1", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.7.4", + "symfony/polyfill-ctype": "^1.17", + "symfony/polyfill-mbstring": "^1.17", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5.1" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.3-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "homepage": "https://gjcampbell.co.uk/" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://vancelucas.com/" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.3.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2021-01-20T15:23:13+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "1.5.6", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "80953678b19901e5165c56752d087fc11526017c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c", + "reference": "80953678b19901e5165c56752d087fc11526017c", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/1.5.6" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2020-11-12T00:07:28+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, + "time": "2021-03-09T10:59:23+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-11-10T18:47:58+00:00" + }, + { + "name": "facade/flare-client-php", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/facade/flare-client-php.git", + "reference": "47b639dc02bcfdfc4ebb83de703856fa01e35f5f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/flare-client-php/zipball/47b639dc02bcfdfc4ebb83de703856fa01e35f5f", + "reference": "47b639dc02bcfdfc4ebb83de703856fa01e35f5f", + "shasum": "" + }, + "require": { + "facade/ignition-contracts": "~1.0", + "illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0", + "php": "^7.1|^8.0", + "symfony/http-foundation": "^3.3|^4.1|^5.0", + "symfony/mime": "^3.4|^4.0|^5.1", + "symfony/var-dumper": "^3.4|^4.0|^5.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.14", + "phpunit/phpunit": "^7.5.16", + "spatie/phpunit-snapshot-assertions": "^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Facade\\FlareClient\\": "src" + }, + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/facade/flare-client-php", + "keywords": [ + "exception", + "facade", + "flare", + "reporting" + ], + "support": { + "issues": "https://github.com/facade/flare-client-php/issues", + "source": "https://github.com/facade/flare-client-php/tree/1.8.1" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2021-05-31T19:23:29+00:00" + }, + { + "name": "facade/ignition", + "version": "2.11.2", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition.git", + "reference": "7c4e7a7da184cd00c7ce6eacc590200bb9672de7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition/zipball/7c4e7a7da184cd00c7ce6eacc590200bb9672de7", + "reference": "7c4e7a7da184cd00c7ce6eacc590200bb9672de7", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "facade/flare-client-php": "^1.6", + "facade/ignition-contracts": "^1.0.2", + "illuminate/support": "^7.0|^8.0", + "monolog/monolog": "^2.0", + "php": "^7.2.5|^8.0", + "symfony/console": "^5.0", + "symfony/var-dumper": "^5.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.14", + "mockery/mockery": "^1.3", + "orchestra/testbench": "^5.0|^6.0", + "psalm/plugin-laravel": "^1.2" + }, + "suggest": { + "laravel/telescope": "^3.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Facade\\Ignition\\IgnitionServiceProvider" + ], + "aliases": { + "Flare": "Facade\\Ignition\\Facades\\Flare" + } + } + }, + "autoload": { + "psr-4": { + "Facade\\Ignition\\": "src" + }, + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://github.com/facade/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/facade/ignition/issues", + "source": "https://github.com/facade/ignition" + }, + "time": "2021-07-20T14:01:22+00:00" + }, + { + "name": "facade/ignition-contracts", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition-contracts.git", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v2.15.8", + "phpunit/phpunit": "^9.3.11", + "vimeo/psalm": "^3.17.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Facade\\IgnitionContracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://flareapp.io", + "role": "Developer" + } + ], + "description": "Solution contracts for Ignition", + "homepage": "https://github.com/facade/ignition-contracts", + "keywords": [ + "contracts", + "flare", + "ignition" + ], + "support": { + "issues": "https://github.com/facade/ignition-contracts/issues", + "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" + }, + "time": "2020-10-16T08:27:54+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.15.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "89c6201c74db25fa759ff16e78a4d8f32547770e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/89c6201c74db25fa759ff16e78a4d8f32547770e", + "reference": "89c6201c74db25fa759ff16e78a4d8f32547770e", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/container": "^1.0", + "symfony/deprecation-contracts": "^2.2" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-intl": "*", + "symfony/phpunit-bridge": "^4.4 || ^5.2" + }, + "suggest": { + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v1.15-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.15.0" + }, + "time": "2021-07-06T20:39:40+00:00" + }, + { + "name": "filp/whoops", + "version": "2.14.0", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "fdf92f03e150ed84d5967a833ae93abffac0315b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/fdf92f03e150ed84d5967a833ae93abffac0315b", + "reference": "fdf92f03e150ed84d5967a833ae93abffac0315b", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.14.0" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2021-07-13T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.8.6", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "51ecfe0f048f8f8e6c5617e02a1f67ca22817c98" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/51ecfe0f048f8f8e6c5617e02a1f67ca22817c98", + "reference": "51ecfe0f048f8f8e6c5617e02a1f67ca22817c98", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.0|^9.0", + "illuminate/contracts": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "php": "^7.3|^8.0" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Docker files for running a basic Laravel application.", + "keywords": [ + "docker", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" + }, + "time": "2021-07-15T07:35:41+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "d1339f64479af1bee0e82a0413813fe5345a54ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/d1339f64479af1bee0e82a0413813fe5345a54ea", + "reference": "d1339f64479af1bee0e82a0413813fe5345a54ea", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": "^7.3 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Mockery": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/1.4.3" + }, + "time": "2021-02-24T09:51:49+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-11-13T09:40:50+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v5.6.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "0122ac6b03c75279ef78d1c0ad49725dfc52a8d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/0122ac6b03c75279ef78d1c0ad49725dfc52a8d2", + "reference": "0122ac6b03c75279ef78d1c0ad49725dfc52a8d2", + "shasum": "" + }, + "require": { + "facade/ignition-contracts": "^1.0", + "filp/whoops": "^2.7.2", + "php": "^7.3 || ^8.0", + "symfony/console": "^5.0" + }, + "require-dev": { + "brianium/paratest": "^6.1", + "fideloper/proxy": "^4.4.1", + "friendsofphp/php-cs-fixer": "^2.17.3", + "fruitcake/laravel-cors": "^2.0.3", + "laravel/framework": "^8.0 || ^9.0", + "nunomaduro/larastan": "^0.6.2", + "nunomaduro/mock-final-classes": "^1.0", + "orchestra/testbench": "^6.0 || ^7.0", + "phpstan/phpstan": "^0.12.64", + "phpunit/phpunit": "^9.5.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2021-07-26T20:39:06+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "bae7c545bef187884426f042434e561ab1ddb182" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.1.0" + }, + "time": "2021-02-23T14:00:09+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.2.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + }, + "time": "2020-09-03T19:13:55+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + }, + "time": "2020-09-17T18:55:26+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.13.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.1", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.13.0" + }, + "time": "2021-03-17T13:42:18+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "f6293e1b30a2354e8428e004689671b83871edde" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", + "reference": "f6293e1b30a2354e8428e004689671b83871edde", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.10.2", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-03-28T07:26:59+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:57:25+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.5.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "d0dc8b6999c937616df4fb046792004b33fd31c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d0dc8b6999c937616df4fb046792004b33fd31c5", + "reference": "d0dc8b6999c937616df4fb046792004b33fd31c5", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.1", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.3", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^2.3.4", + "sebastian/version": "^3.0.2" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.7" + }, + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-07-19T06:14:47+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:52:38+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:24:23+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-06-11T13:31:12+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "abandoned": true, + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "2.3.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-06-15T12:49:02+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^7.3|^8.0" + }, + "platform-dev": [], + "plugin-api-version": "2.0.0" +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..2370500 --- /dev/null +++ b/config/app.php @@ -0,0 +1,311 @@ + env('APP_NAME', 'Tadah'), + + /* + |-------------------------------------------------------------------------- + | Custom Configuration + |-------------------------------------------------------------------------- + | + | Configuration options for the website. + | + */ + + // Site settings + 'server_creation_enabled' => true, + 'item_creation_enabled' => true, + 'asset_upload_cost' => 0, + 'assets_approved_by_default' => true, + 'thumbnail_key' => 'vubPQLBiNPfW38KLWd5d', + 'dedicated_key' => 'wBY1uid5uJY2fXA0Hypr', + + // Forum settings + 'posting_enabled' => true, + 'posting_cooldown' => 15, + + // Main page quotes + 'quotes' => [ + 'Come on in tadah.rocks tadah.rocks', + 'SOTP', + 'SYOP', + 'Made you look', + 'The game', + 'Can you stop', + 'looking for a femboy, hit me up', + 'donate pl0x', + 'Roblox.com', + 'Putos pendejos tontaa', + 'Wanna be friends?', + '“Stop trying to kill the part of u that is cringe. Kill the part of u that cringes.” -Jesus', + 'yall are the appetomy of mental illness', + 'dudes having a whole ass annuerism', + 'its treadmill time [ Content Deleted ]', + 'Anonfiles.com/', + 'Ignorance is bliss, when tis folly to be wise.', + 'Null may have deleted general but at least he\'s not a pedo.', + 'today i put a chicken tikka slice in the oven when i came back from school BUT I ACCIDENTALLY SET THE OVEN TO GRILL AND NOW THE FUCKING THING LOOKS LIKE THIS', + 'ay bro just warning you, you probably shouldn\'t involve yourself with taskmanager\'s mercury shit he\'s a malicious individual who was behind the leaking of my IP address, and also blatantly stole the name from brent\'s mercury thing', + 'Nancy Pelosi farting while twerking....Blowing straight dust...', + 'Hello lets talk', + 'Yeah', + 'i dont think it is but that doesnt mean i am into it', + 'This day just keeps getting better n better! Free food!', + 'https://twitter.com/i/status/550345227790061570', + 'need to fart on someone\'s face who wants a pink eye from me', + 'https://twitter.com/i/status/386917584580665344', + 'Always love looking back on these dms just to see how carrot turned you into a complete degenerate. Turned from you trying you get client patching help from me to some dumbass bottling thing, then finally they switched to full [ Content Deleted ] mode', + 'https://twitter.com/i/status/1437064280382205958', + 'ur such a noob i mean how could you delete the whole winners??? that just wasted my time of even TRYING to get to winners ur just the noobiest thing ive like EVER seen im gonna keep sending you hate messages until ur sorry for deleting the winners. you hear me? GOOD well you better regret doing that cus im gonna spam yo inbox teehehhehehehheeh!!!! when i make a group ill put u in the biggest noob ever rank XD XD XD PWNAGE!!!!!! lolololol ima spam you ur a nooby fail.you are stupid. and you are stupid. and dont forget that you are stupid. your mom is a fail even more of a fail then you. yo mamma so fat when she went outside in a red dress kids yelled HEY KOOLAID!', + 'got you', + 'get on fortnite', + 'Like and RT for your chance to win 100,000 wasps delivered right to your home!!!', + 'Wanna rp', + 'this image reminds me of the song Archimedes from TF2', + 'https://www.youtube.com/watch?v=CMJizXYSiKk', + 'can you stop writing in shift lock for once', + 'wouldn\'t want to join shitvival #484637595737595 to begin with lmfao', + '"remember when ray leaked like 3 ips on the rblxdev forums" -XlXi, owner of Graphictoria', + 'footlong meatball on italian herb and cheese with provolone, toasted' + ], + + // Registration settings + 'invite_keys_required' => true, + 'registration_enabled' => true, + + // Currency settings + 'currency_name' => 'Dahllor', + 'currency_name_multiple' => 'Dahllors', + 'daily_reward' => 25, + + // Launcher/client settings + 'version_string' => '1.0.FUCKCORPORATIONS', + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + 'asset_url' => env('ASSET_URL', null), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'EST', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Faker Locale + |-------------------------------------------------------------------------- + | + | This locale will be used by the Faker PHP library when generating fake + | data for your database seeds. For example, this will be used to get + | localized telephone numbers, street address information and more. + | + */ + + 'faker_locale' => 'en_US', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + + /* + * Package Service Providers... + */ + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\AuthServiceProvider::class, + // App\Providers\BroadcastServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => [ + + 'App' => Illuminate\Support\Facades\App::class, + 'Arr' => Illuminate\Support\Arr::class, + 'Artisan' => Illuminate\Support\Facades\Artisan::class, + 'Auth' => Illuminate\Support\Facades\Auth::class, + 'Blade' => Illuminate\Support\Facades\Blade::class, + 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, + 'Bus' => Illuminate\Support\Facades\Bus::class, + 'Cache' => Illuminate\Support\Facades\Cache::class, + 'Config' => Illuminate\Support\Facades\Config::class, + 'Cookie' => Illuminate\Support\Facades\Cookie::class, + 'Crypt' => Illuminate\Support\Facades\Crypt::class, + 'Date' => Illuminate\Support\Facades\Date::class, + 'DB' => Illuminate\Support\Facades\DB::class, + 'Eloquent' => Illuminate\Database\Eloquent\Model::class, + 'Event' => Illuminate\Support\Facades\Event::class, + 'File' => Illuminate\Support\Facades\File::class, + 'Gate' => Illuminate\Support\Facades\Gate::class, + 'Hash' => Illuminate\Support\Facades\Hash::class, + 'Http' => Illuminate\Support\Facades\Http::class, + 'Lang' => Illuminate\Support\Facades\Lang::class, + 'Log' => Illuminate\Support\Facades\Log::class, + 'Mail' => Illuminate\Support\Facades\Mail::class, + 'Notification' => Illuminate\Support\Facades\Notification::class, + 'Password' => Illuminate\Support\Facades\Password::class, + 'Queue' => Illuminate\Support\Facades\Queue::class, + 'Redirect' => Illuminate\Support\Facades\Redirect::class, + // 'Redis' => Illuminate\Support\Facades\Redis::class, + 'Request' => Illuminate\Support\Facades\Request::class, + 'Response' => Illuminate\Support\Facades\Response::class, + 'Route' => Illuminate\Support\Facades\Route::class, + 'Schema' => Illuminate\Support\Facades\Schema::class, + 'Session' => Illuminate\Support\Facades\Session::class, + 'Storage' => Illuminate\Support\Facades\Storage::class, + 'Str' => Illuminate\Support\Str::class, + 'URL' => Illuminate\Support\Facades\URL::class, + 'Validator' => Illuminate\Support\Facades\Validator::class, + 'View' => Illuminate\Support\Facades\View::class, + + ], + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100644 index 0000000..ba1a4d8 --- /dev/null +++ b/config/auth.php @@ -0,0 +1,117 @@ + [ + 'guard' => 'web', + 'passwords' => 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session", "token" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + + 'api' => [ + 'driver' => 'token', + 'provider' => 'users', + 'hash' => false, + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => App\Models\User::class, + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expire time is the number of minutes that the reset token should be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => 'password_resets', + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the amount of seconds before a password confirmation + | times out and the user is prompted to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => 10800, + +]; diff --git a/config/broadcasting.php b/config/broadcasting.php new file mode 100644 index 0000000..2d52982 --- /dev/null +++ b/config/broadcasting.php @@ -0,0 +1,64 @@ + env('BROADCAST_DRIVER', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'cluster' => env('PUSHER_APP_CLUSTER'), + 'useTLS' => true, + ], + ], + + 'ably' => [ + 'driver' => 'ably', + 'key' => env('ABLY_KEY'), + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000..e32a2fd --- /dev/null +++ b/config/cache.php @@ -0,0 +1,106 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "apc", "array", "database", "file", + | "memcached", "redis", "dynamodb", "null" + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + 'lock_connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'cache', + 'lock_connection' => 'default', + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing a RAM based store such as APC or Memcached, there might + | be other applications utilizing the same cache. So, we'll specify a + | value to get prefixed to all our keys so we can avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'), + +]; diff --git a/config/cors.php b/config/cors.php new file mode 100644 index 0000000..8a39e6d --- /dev/null +++ b/config/cors.php @@ -0,0 +1,34 @@ + ['api/*', 'sanctum/csrf-cookie'], + + 'allowed_methods' => ['*'], + + 'allowed_origins' => ['*'], + + 'allowed_origins_patterns' => [], + + 'allowed_headers' => ['*'], + + 'exposed_headers' => [], + + 'max_age' => 0, + + 'supports_credentials' => false, + +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..b42d9b3 --- /dev/null +++ b/config/database.php @@ -0,0 +1,147 @@ + env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DATABASE_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + 'schema' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + ], + + ], + +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100644 index 0000000..10c9d9b --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,72 @@ + env('FILESYSTEM_DRIVER', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been setup for each driver as an example of the required options. + | + | Supported Drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL').'/storage', + 'visibility' => 'public', + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + ], + +]; diff --git a/config/hashing.php b/config/hashing.php new file mode 100644 index 0000000..8425770 --- /dev/null +++ b/config/hashing.php @@ -0,0 +1,52 @@ + 'bcrypt', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 10), + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 1024, + 'threads' => 2, + 'time' => 2, + ], + +]; diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 0000000..1aa06aa --- /dev/null +++ b/config/logging.php @@ -0,0 +1,105 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => 14, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => env('LOG_LEVEL', 'critical'), + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => SyslogUdpHandler::class, + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + ], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + ], + +]; diff --git a/config/mail.php b/config/mail.php new file mode 100644 index 0000000..54299aa --- /dev/null +++ b/config/mail.php @@ -0,0 +1,110 @@ + env('MAIL_MAILER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers to be used while + | sending an e-mail. You will specify which one you are using for your + | mailers below. You are free to add additional mailers as required. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", + | "postmark", "log", "array" + | + */ + + 'mailers' => [ + 'smtp' => [ + 'transport' => 'smtp', + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + 'port' => env('MAIL_PORT', 587), + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'auth_mode' => null, + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'mailgun' => [ + 'transport' => 'mailgun', + ], + + 'postmark' => [ + 'transport' => 'postmark', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => '/usr/sbin/sendmail -bs', + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + + /* + |-------------------------------------------------------------------------- + | Markdown Mail Settings + |-------------------------------------------------------------------------- + | + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! + | + */ + + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], + +]; diff --git a/config/queue.php b/config/queue.php new file mode 100644 index 0000000..25ea5a8 --- /dev/null +++ b/config/queue.php @@ -0,0 +1,93 @@ + env('QUEUE_CONNECTION', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => 90, + 'block_for' => null, + 'after_commit' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100644 index 0000000..2a1d616 --- /dev/null +++ b/config/services.php @@ -0,0 +1,33 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + ], + + 'postmark' => [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000..4e0f66c --- /dev/null +++ b/config/session.php @@ -0,0 +1,201 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION', null), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | While using one of the framework's cache driven session backends you may + | list a cache store that should be used for these sessions. This value + | must match with one of the application's configured cache "stores". + | + | Affects: "apc", "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE', null), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => env('SESSION_DOMAIN', null), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you if it can not be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. You are free to modify this option if needed. + | + */ + + 'http_only' => true, + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" since this is a secure default value. + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => 'lax', + +]; diff --git a/config/view.php b/config/view.php new file mode 100644 index 0000000..22b8a18 --- /dev/null +++ b/config/view.php @@ -0,0 +1,36 @@ + [ + resource_path('views'), + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => env( + 'VIEW_COMPILED_PATH', + realpath(storage_path('framework/views')) + ), + +]; diff --git a/database/.gitignore b/database/.gitignore new file mode 100644 index 0000000..9b19b93 --- /dev/null +++ b/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/database/factories/ServerFactory.php b/database/factories/ServerFactory.php new file mode 100644 index 0000000..7313b8b --- /dev/null +++ b/database/factories/ServerFactory.php @@ -0,0 +1,34 @@ + $this->faker->sentence($nbWords = 2, $variableNbWords = true), + 'description' => $this->faker->text(), + 'creator' => 1, + 'ip' => '127.0.0.1', + 'port' => '53640', + 'secret' => Str::random(10) + ]; + } +} diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php new file mode 100644 index 0000000..f73c279 --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,49 @@ + $this->faker->firstName() . $this->faker->lastName(), + 'email' => $this->faker->unique()->safeEmail(), + 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password + 'remember_token' => Str::random(10), + 'register_ip' => '127.0.0.1', + 'last_ip' => '127.0.0.1', + 'admin' => false + ]; + } + + /** + * Indicate that the model's email address should be unverified. + * + * @return \Illuminate\Database\Eloquent\Factories\Factory + */ + public function unverified() + { + return $this->state(function (array $attributes) { + return [ + 'email_verified_at' => null, + ]; + }); + } +} diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php new file mode 100644 index 0000000..9dbe6ff --- /dev/null +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -0,0 +1,46 @@ +id(); + $table->string('username')->unique(); + $table->string('email')->unique(); + $table->string('password'); + $table->string('register_ip'); + $table->string('last_ip'); + $table->string('blurb', 2000)->nullable(); + $table->boolean('admin')->default(false); + $table->boolean('banned')->default(false); + $table->string('ban_reason')->nullable(); + $table->datetime('banned_until')->nullable(); + $table->bigInteger('money')->default(0); + $table->string('invite_key')->nullable(); + $table->rememberToken(); + $table->datetime('joined')->useCurrent(); + $table->datetime('last_online')->useCurrent(); + $table->datetime('last_daily_reward')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users'); + } +} diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php new file mode 100644 index 0000000..db9df67 --- /dev/null +++ b/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -0,0 +1,32 @@ +string('email')->index(); + $table->string('token'); + $table->datetime('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('password_resets'); + } +} diff --git a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php new file mode 100644 index 0000000..ef551bd --- /dev/null +++ b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->datetime('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('failed_jobs'); + } +} diff --git a/database/migrations/2021_05_22_073628_create_servers_table.php b/database/migrations/2021_05_22_073628_create_servers_table.php new file mode 100644 index 0000000..d37af7a --- /dev/null +++ b/database/migrations/2021_05_22_073628_create_servers_table.php @@ -0,0 +1,39 @@ +id(); + $table->string('name', 40)->default('My Server'); + $table->string('description', 250)->default("No description."); + $table->bigInteger('creator'); + $table->string('ip'); + $table->string('port'); + $table->string('secret'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('servers'); + } +} diff --git a/database/migrations/2021_05_22_084455_create_invite_keys_table.php b/database/migrations/2021_05_22_084455_create_invite_keys_table.php new file mode 100644 index 0000000..5ee7d1c --- /dev/null +++ b/database/migrations/2021_05_22_084455_create_invite_keys_table.php @@ -0,0 +1,45 @@ +id(); + $table->bigInteger('creator')->default(1); + $table->string('token'); + $table->integer('uses')->default(1); + $table->timestamps(); + }); + + DB::table('invite_keys')->insert( + array( + 'creator' => 1, + 'token' => 'TadahKey-1704developertesting', + 'uses' => 1 + ) + ); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('invite_keys'); + } +} diff --git a/database/migrations/2021_06_18_193936_create_game_tokens_table.php b/database/migrations/2021_06_18_193936_create_game_tokens_table.php new file mode 100644 index 0000000..13ad0af --- /dev/null +++ b/database/migrations/2021_06_18_193936_create_game_tokens_table.php @@ -0,0 +1,32 @@ +string('user_id'); + $table->string('server_id'); + $table->string('token'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('game_tokens'); + } +} diff --git a/database/migrations/2021_06_23_011325_create_bodycolors_table.php b/database/migrations/2021_06_23_011325_create_bodycolors_table.php new file mode 100644 index 0000000..1e59216 --- /dev/null +++ b/database/migrations/2021_06_23_011325_create_bodycolors_table.php @@ -0,0 +1,37 @@ +id(); + $table->bigInteger('user_id'); + $table->integer('head_color')->default(1); + $table->integer('torso_color')->default(1010); + $table->integer('left_arm_color')->default(1); + $table->integer('right_arm_color')->default(1); + $table->integer('left_leg_color')->default(26); + $table->integer('right_leg_color')->default(26); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('body_colors'); + } +} diff --git a/database/migrations/2021_06_25_021614_create_items_table.php b/database/migrations/2021_06_25_021614_create_items_table.php new file mode 100644 index 0000000..d374321 --- /dev/null +++ b/database/migrations/2021_06_25_021614_create_items_table.php @@ -0,0 +1,40 @@ +id(); + $table->string('name', 100)->default('New Asset'); + $table->string('description', 2000)->default('No description.'); + $table->string('thumbnail_url')->nullable(); + $table->bigInteger('creator')->default(1); + $table->bigInteger('price')->default(0); + $table->boolean('onsale')->default(true); + $table->boolean('approved')->default(false); + $table->string('type'); + $table->bigInteger('sales')->default(0); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('items'); + } +} diff --git a/database/migrations/2021_06_25_022844_create_owned_items_table.php b/database/migrations/2021_06_25_022844_create_owned_items_table.php new file mode 100644 index 0000000..eb1a88d --- /dev/null +++ b/database/migrations/2021_06_25_022844_create_owned_items_table.php @@ -0,0 +1,34 @@ +id(); + $table->bigInteger('user_id'); + $table->bigInteger('item_id'); + $table->boolean('wearing')->default(false); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('owned_items'); + } +} diff --git a/database/migrations/2021_06_25_022855_create_equipped_items_table.php b/database/migrations/2021_06_25_022855_create_equipped_items_table.php new file mode 100644 index 0000000..eaa2ffa --- /dev/null +++ b/database/migrations/2021_06_25_022855_create_equipped_items_table.php @@ -0,0 +1,32 @@ +id(); + $table->bigInteger('user_id'); + $table->bigInteger('item_id'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('equipped_items'); + } +} diff --git a/database/migrations/2021_09_16_173004_create_render_queue_table.php b/database/migrations/2021_09_16_173004_create_render_queue_table.php new file mode 100644 index 0000000..8480601 --- /dev/null +++ b/database/migrations/2021_09_16_173004_create_render_queue_table.php @@ -0,0 +1,33 @@ +id(); + $table->string('type'); + $table->bigInteger('target_id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('render_queue'); + } +} diff --git a/database/migrations/2021_09_18_203618_create_forum_categories_table.php b/database/migrations/2021_09_18_203618_create_forum_categories_table.php new file mode 100644 index 0000000..2d86003 --- /dev/null +++ b/database/migrations/2021_09_18_203618_create_forum_categories_table.php @@ -0,0 +1,35 @@ +id(); + $table->string('name', 100); + $table->string('description', 250); + $table->boolean('admin_only')->default(false); + $table->bigInteger('priority'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('forum_categories'); + } +} diff --git a/database/migrations/2021_09_18_203629_create_forum_posts_table.php b/database/migrations/2021_09_18_203629_create_forum_posts_table.php new file mode 100644 index 0000000..069d1f3 --- /dev/null +++ b/database/migrations/2021_09_18_203629_create_forum_posts_table.php @@ -0,0 +1,36 @@ +id(); + $table->bigInteger('category_id'); + $table->bigInteger('thread_id'); + $table->bigInteger('user_id'); + $table->string('body', 2000); + $table->boolean('stickied')->default(false); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('forum_posts'); + } +} diff --git a/database/migrations/2021_09_18_205159_create_forum_threads_table.php b/database/migrations/2021_09_18_205159_create_forum_threads_table.php new file mode 100644 index 0000000..8baf7e8 --- /dev/null +++ b/database/migrations/2021_09_18_205159_create_forum_threads_table.php @@ -0,0 +1,37 @@ +id(); + $table->bigInteger('category_id'); + $table->bigInteger('user_id'); + $table->string('title', 100); + $table->string('body', 2000); + $table->boolean('stickied')->default(false); + $table->boolean('locked')->default(false); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('forum_threads'); + } +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..57b73b5 --- /dev/null +++ b/database/seeders/DatabaseSeeder.php @@ -0,0 +1,18 @@ +create(); + } +} diff --git a/docker/7.4/Dockerfile b/docker/7.4/Dockerfile new file mode 100644 index 0000000..dbbab30 --- /dev/null +++ b/docker/7.4/Dockerfile @@ -0,0 +1,56 @@ +FROM ubuntu:20.04 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND noninteractive +ENV TZ=UTC + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 \ + && mkdir -p ~/.gnupg \ + && chmod 600 ~/.gnupg \ + && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \ + && apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E5267A6C \ + && apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C300EE8C \ + && echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu focal main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php7.4-cli php7.4-dev \ + php7.4-pgsql php7.4-sqlite3 php7.4-gd \ + php7.4-curl php7.4-memcached \ + php7.4-imap php7.4-mysql php7.4-mbstring \ + php7.4-xml php7.4-zip php7.4-bcmath php7.4-soap \ + php7.4-intl php7.4-readline php7.4-pcov \ + php7.4-msgpack php7.4-igbinary php7.4-ldap \ + php7.4-redis \ + && php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -sL https://deb.nodesource.com/setup_15.x | bash - \ + && apt-get install -y nodejs \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ + && echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y mysql-client \ + && apt-get install -y postgresql-client \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php7.4 + +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/7.4/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +EXPOSE 8000 + +ENTRYPOINT ["start-container"] diff --git a/docker/7.4/php.ini b/docker/7.4/php.ini new file mode 100644 index 0000000..66d04d5 --- /dev/null +++ b/docker/7.4/php.ini @@ -0,0 +1,4 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS diff --git a/docker/7.4/start-container b/docker/7.4/start-container new file mode 100644 index 0000000..39e5270 --- /dev/null +++ b/docker/7.4/start-container @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ];then + exec gosu $WWWUSER "$@" +else + /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/7.4/supervisord.conf b/docker/7.4/supervisord.conf new file mode 100644 index 0000000..9d28479 --- /dev/null +++ b/docker/7.4/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80 +user=sail +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/8.0/Dockerfile b/docker/8.0/Dockerfile new file mode 100644 index 0000000..52a8e31 --- /dev/null +++ b/docker/8.0/Dockerfile @@ -0,0 +1,59 @@ +FROM ubuntu:20.04 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND noninteractive +ENV TZ=UTC + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 \ + && mkdir -p ~/.gnupg \ + && chmod 600 ~/.gnupg \ + && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \ + && apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E5267A6C \ + && apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C300EE8C \ + && echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu focal main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php8.0-cli php8.0-dev \ + php8.0-pgsql php8.0-sqlite3 php8.0-gd \ + php8.0-curl php8.0-memcached \ + php8.0-imap php8.0-mysql php8.0-mbstring \ + php8.0-xml php8.0-zip php8.0-bcmath php8.0-soap \ + php8.0-intl php8.0-readline \ + php8.0-msgpack php8.0-igbinary php8.0-ldap \ + php8.0-redis \ + && php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -sL https://deb.nodesource.com/setup_15.x | bash - \ + && apt-get install -y nodejs \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ + && echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y mysql-client \ + && apt-get install -y postgresql-client \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN pecl channel-update https://pecl.php.net/channel.xml \ + && pecl install swoole + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.0 + +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/8.0/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +EXPOSE 8000 + +ENTRYPOINT ["start-container"] diff --git a/docker/8.0/php.ini b/docker/8.0/php.ini new file mode 100644 index 0000000..9167521 --- /dev/null +++ b/docker/8.0/php.ini @@ -0,0 +1,7 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS + +# Extensions... +extension=swoole.so diff --git a/docker/8.0/start-container b/docker/8.0/start-container new file mode 100644 index 0000000..39e5270 --- /dev/null +++ b/docker/8.0/start-container @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ];then + exec gosu $WWWUSER "$@" +else + /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/8.0/supervisord.conf b/docker/8.0/supervisord.conf new file mode 100644 index 0000000..9d28479 --- /dev/null +++ b/docker/8.0/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80 +user=sail +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b1a4ab9 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,10929 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/compat-data": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", + "dev": true + }, + "@babel/core": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", + "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", + "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.15", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.1.tgz", + "integrity": "sha512-r8rsUahG4ywm0QpGcCrLaUSOuNAISR3IZCg4Fx05Ozq31aCUrQsTLH6KPxy0N5ULoQ4Sn9qjNdGNtbPWAC6hYg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", + "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", + "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", + "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", + "dev": true, + "requires": { + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "dev": true, + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/parser": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", + "dev": true + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", + "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.13.12" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz", + "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", + "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.13.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz", + "integrity": "sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-class-static-block": "^7.12.13" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", + "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", + "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", + "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", + "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", + "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", + "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", + "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.8", + "@babel/helper-compilation-targets": "^7.13.8", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.13.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", + "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", + "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", + "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-create-class-features-plugin": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", + "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.1.tgz", + "integrity": "sha512-2mQXd0zBrwfp0O1moWIhPpEeTKDvxyHcnma3JATVP1l+CctWBuot6OJG8LQ4DnBj4ZZPSmlb/fm4mu47EOAnVA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", + "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", + "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", + "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz", + "integrity": "sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", + "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-simple-access": "^7.13.12", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", + "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-identifier": "^7.12.11", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", + "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", + "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", + "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", + "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz", + "integrity": "sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", + "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/preset-env": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.1.tgz", + "integrity": "sha512-0M4yL1l7V4l+j/UHvxcdvNfLB9pPtIooHTbEhgD/6UGyh8Hy3Bm1Mj0buzjDXATCSz3JFibVdnoJZCrlUCanrQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-async-generator-functions": "^7.13.15", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-class-static-block": "^7.13.11", + "@babel/plugin-proposal-dynamic-import": "^7.13.8", + "@babel/plugin-proposal-export-namespace-from": "^7.12.13", + "@babel/plugin-proposal-json-strings": "^7.13.8", + "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-numeric-separator": "^7.12.13", + "@babel/plugin-proposal-object-rest-spread": "^7.13.8", + "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-private-property-in-object": "^7.14.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0", + "@babel/plugin-syntax-top-level-await": "^7.12.13", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.14.1", + "@babel/plugin-transform-classes": "^7.13.0", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.17", + "@babel/plugin-transform-dotall-regex": "^7.12.13", + "@babel/plugin-transform-duplicate-keys": "^7.12.13", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-function-name": "^7.12.13", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-member-expression-literals": "^7.12.13", + "@babel/plugin-transform-modules-amd": "^7.14.0", + "@babel/plugin-transform-modules-commonjs": "^7.14.0", + "@babel/plugin-transform-modules-systemjs": "^7.13.8", + "@babel/plugin-transform-modules-umd": "^7.14.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", + "@babel/plugin-transform-new-target": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.13.0", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.13.15", + "@babel/plugin-transform-reserved-words": "^7.12.13", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-escapes": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.14.1", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", + "core-js-compat": "^3.9.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", + "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", + "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", + "dev": true + }, + "@fortawesome/fontawesome-free": { + "version": "5.15.3", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.3.tgz", + "integrity": "sha512-rFnSUN/QOtnOAgqFRooTA3H57JLDm0QEG/jPdk+tLQNL/eWd+Aok8g3qCI+Q1xuDPWpGW/i9JySpJVsq8Q0s9w==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, + "@popperjs/core": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.2.tgz", + "integrity": "sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==" + }, + "@types/babel__core": { + "version": "7.1.14", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", + "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", + "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/browser-sync": { + "version": "2.26.1", + "resolved": "https://registry.npmjs.org/@types/browser-sync/-/browser-sync-2.26.1.tgz", + "integrity": "sha512-zuz0uF2QccSVbG4ubkjVDlQYpeBX/JXvmlqFFmp04FYOXunXZtx0y+UdWJxu7uryMMGkQykujUMm/ju85kqI7Q==", + "dev": true, + "requires": { + "@types/micromatch": "^2", + "@types/node": "*", + "@types/serve-static": "*", + "chokidar": "^2.1.2" + }, + "dependencies": { + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + } + } + }, + "@types/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-x8xEbfTtcv5uyQDrBXKg9Beo5QhTPqO4vM0uq4iU27/nhyRRWNEMKHjxvAb0WDvp2Mnt4Sw0jKmIi5yQF/k2Ag==", + "dev": true, + "requires": { + "@types/node": "*", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@types/cssnano": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/cssnano/-/cssnano-4.0.0.tgz", + "integrity": "sha512-BC/2ibKZfPIaBLBNzkitdW1IvvX/LKW6/QXGc4Su/tAJ7mQ3f2CKBuGCCKaqGAnoKwzfuC7G/recpkARwdOwuA==", + "dev": true, + "requires": { + "postcss": "5 - 7" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@types/eslint": { + "version": "7.2.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", + "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.47", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", + "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", + "dev": true + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/http-proxy": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.5.tgz", + "integrity": "sha512-GNkDE7bTv6Sf8JbV2GksknKOsk7OznNYHSdrtvPJXO0qJ9odZig6IZKUi5RFGi6d1bf6dgIAe4uXi3DBc7069Q==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/imagemin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-7.0.0.tgz", + "integrity": "sha512-BiNd5FazD5ZmJUYD9txsbrttL0P0welrb9yAPn6ykKK3kWufwFsxYqw5KdggfZQDjiNYwsBrX+Fwei0Xsw4oAw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/imagemin-gifsicle": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz", + "integrity": "sha512-RVFQZhPm/6vLC8wDvzHa34ZDrJECqmDV4XBS99AEk2ObyV4pcLQwObGYlmBv6fi9AtRLHf8mnKGczIHtF77u7w==", + "dev": true, + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-mozjpeg": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz", + "integrity": "sha512-sR2nEZOrlbgnmVgG+lXetZOvhgtctLe1hBfvySnPnxDd2pOon9mMPq7SHFI89VZT1AXvFgRs8w6X8ik8potpgA==", + "dev": true, + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-optipng": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.0.tgz", + "integrity": "sha512-Qn4gTV1fpPG2WIsUIl10yi2prudOuDIx+D+O0H3aKZRcTCwpMjszBVeRWUqkhG5wADhWO4giLut1sFNr3H2XIQ==", + "dev": true, + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-svgo": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-8.0.1.tgz", + "integrity": "sha512-YafkdrVAcr38U0Ln1C+L1n4SIZqC47VBHTyxCq7gTUSd1R9MdIvMcrljWlgU1M9O68WZDeQWUrKipKYfEOCOvQ==", + "dev": true, + "requires": { + "@types/imagemin": "*", + "@types/svgo": "^1" + } + }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, + "@types/micromatch": { + "version": "2.3.30", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-2.3.30.tgz", + "integrity": "sha512-6rW4NsUHaDudxJSuRlm1PdNu61CDXkgix7LBOBg7b3yWQ43XANYSPwkvX1cGiZvBVZW8c5rsCEfrfzbPkch8ag==", + "dev": true, + "requires": { + "@types/parse-glob": "*" + } + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", + "dev": true + }, + "@types/node": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.2.tgz", + "integrity": "sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA==", + "dev": true + }, + "@types/parse-glob": { + "version": "3.0.29", + "resolved": "https://registry.npmjs.org/@types/parse-glob/-/parse-glob-3.0.29.tgz", + "integrity": "sha1-akDsfr0kGO5p7jl+SOQhaSaKEL8=", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/serve-static": { + "version": "1.13.9", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", + "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/svgo": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.5.tgz", + "integrity": "sha512-y9Pw8IK50OqFRDpdI9Is29KlWiENVW9FDvlTmGHelvTfR2brYFJbsClvulZfeq6YKacFrDsG9a39w0kJZdHLaw==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz", + "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==", + "dev": true + }, + "@webpack-cli/info": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz", + "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz", + "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==", + "dev": true + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", + "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", + "dev": true + }, + "adjust-sourcemap-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", + "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.5.tgz", + "integrity": "sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==", + "dev": true, + "requires": { + "browserslist": "^4.16.3", + "caniuse-lite": "^1.0.30001196", + "colorette": "^1.2.2", + "fraction.js": "^4.0.13", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" + } + }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "dev": true, + "requires": { + "follow-redirects": "^1.10.0" + } + }, + "babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", + "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.0", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", + "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.0", + "core-js-compat": "^3.9.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", + "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "bootstrap": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.0.tgz", + "integrity": "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001228", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", + "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==", + "dev": true + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "dev": true + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "ci-info": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", + "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-css": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz", + "integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-table3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", + "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^4.2.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "collect.js": { + "version": "4.28.6", + "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.28.6.tgz", + "integrity": "sha512-NAyuk1DnCotRaDZIS5kJ4sptgkwOeYqElird10yziN5JBuwYOGkOTguhNcPn5g344IfylZecxNYZAVXgv19p5Q==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "optional": true + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "dev": true, + "requires": { + "arity-n": "^1.0.4" + } + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", + "integrity": "sha1-QPM1MInWVGdpXLGIa0Xt1jfYzKg=", + "dev": true, + "requires": { + "commander": "^2.9.0" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js-compat": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz", + "integrity": "sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "dev": true + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "css-loader": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.4.tgz", + "integrity": "sha512-OFYGyINCKkdQsTrSYxzGSFnGS4gNjcXkKkQgWxK138jgnPt+lepxdjSZNc8sHAl5vP3DhsJUxufWIjOwI8PMMw==", + "dev": true, + "requires": { + "camelcase": "^6.2.0", + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.10", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "dev": true, + "requires": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "dependencies": { + "globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + } + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-node": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.5.tgz", + "integrity": "sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + } + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.727", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz", + "integrity": "sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "enhanced-resolve": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + } + }, + "es-module-lexer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", + "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", + "dev": true + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", + "dev": true + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "file-type": { + "version": "12.4.2", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", + "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", + "dev": true + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fraction.js": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.13.tgz", + "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true + }, + "html-loader": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz", + "integrity": "sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==", + "dev": true, + "requires": { + "html-minifier-terser": "^5.1.1", + "htmlparser2": "^4.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "dependencies": { + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + } + } + }, + "htmlparser2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", + "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" + }, + "dependencies": { + "dom-serializer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz", + "integrity": "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "entities": "^2.0.0" + }, + "dependencies": { + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + } + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "domutils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", + "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "dependencies": { + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + } + } + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", + "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "imagemin": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", + "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", + "dev": true, + "requires": { + "file-type": "^12.0.0", + "globby": "^10.0.0", + "graceful-fs": "^4.2.2", + "junk": "^3.1.0", + "make-dir": "^3.0.0", + "p-pipe": "^3.0.0", + "replace-ext": "^1.0.0" + } + }, + "img-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-3.0.2.tgz", + "integrity": "sha512-rSriLKgvi85Km7ppSF+AEAM3nU4fxpvCkaXtC/IoCEU7jfks55bEANFs0bB9YXYkxY9JurZQIZFtXh5Gue3upw==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + } + }, + "import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dev": true, + "requires": { + "import-from": "^3.0.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "internal-ip": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", + "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", + "dev": true, + "requires": { + "default-gateway": "^6.0.0", + "ipaddr.js": "^1.9.1", + "is-ip": "^3.1.0", + "p-event": "^4.2.0" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } + } + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "dev": true + }, + "ipaddr.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.0.tgz", + "integrity": "sha512-S54H9mIj0rbxRIyrDMEuuER86LdlgUg9FSeZ8duQb6CUG2iRrA36MYVQBSprTF/ZeAwvyQ5mDGuNvIPM0BIl3w==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-ip": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", + "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", + "dev": true, + "requires": { + "ip-regex": "^4.0.0" + } + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "dev": true + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "dev": true + }, + "laravel-mix": { + "version": "6.0.19", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.19.tgz", + "integrity": "sha512-SH//4h/bi2ff5hyBfwQ0DE0VfTkskGLU+a/l7HdmTz1F+cJdvakajziyBVRwa9U3+DyvZo9eo9Jgq1jdZWW3XQ==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/runtime": "^7.12.1", + "@types/babel__core": "^7.1.12", + "@types/browser-sync": "^2.26.1", + "@types/clean-css": "^4.2.2", + "@types/cssnano": "^4.0.0", + "@types/imagemin-gifsicle": "^7.0.0", + "@types/imagemin-mozjpeg": "^8.0.0", + "@types/imagemin-optipng": "^5.2.0", + "@types/imagemin-svgo": "^8.0.0", + "autoprefixer": "^10.0.1", + "babel-loader": "^8.1.0", + "chalk": "^4.1.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3 || ^5.1.1", + "cli-table3": "^0.6.0", + "collect.js": "^4.28.4", + "commander": "^7.1.0", + "concat": "^1.0.3", + "css-loader": "^5.0.0", + "cssnano": "^4.1.11", + "dotenv": "^8.2.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^6.1.1", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "html-loader": "^1.3.2", + "imagemin": "^7.0.1", + "img-loader": "^3.0.2", + "lodash": "^4.17.20", + "md5": "^2.3.0", + "mini-css-extract-plugin": "^1.1.0", + "node-libs-browser": "^2.2.1", + "postcss-load-config": "^3.0.0", + "postcss-loader": "^5.2.0", + "semver": "^7.3.4", + "strip-ansi": "^6.0.0", + "style-loader": "^2.0.0", + "terser": "^5.3.7", + "terser-webpack-plugin": "^5.0.0", + "vue-style-loader": "^4.1.3", + "webpack": "^5.25.1", + "webpack-cli": "^4.1.0", + "webpack-dev-server": "4.0.0-beta.2", + "webpack-merge": "^5.2.0", + "webpack-notifier": "^1.8.0", + "webpackbar": "^5.0.0-3", + "yargs": "^16.1.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", + "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^3.1.0" + }, + "dependencies": { + "mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "dev": true + } + } + }, + "memfs": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz", + "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==", + "dev": true, + "requires": { + "fs-monkey": "1.0.3" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "dev": true + }, + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "dev": true, + "requires": { + "mime-db": "1.47.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", + "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true + }, + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-notifier": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", + "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, + "node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "dev": true, + "requires": { + "p-timeout": "^3.1.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true + }, + "p-retry": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.5.0.tgz", + "integrity": "sha512-5Hwh4aVQSu6BEP+w2zKlVXtFAaYQe1qWuVADSgoeVlLjwe/Q/AMSoRR4MDeaAfu8llT+YNbEijWu/YF3m6avkg==", + "dev": true, + "requires": { + "@types/retry": "^0.12.0", + "retry": "^0.12.0" + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", + "dev": true + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "8.2.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", + "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", + "dev": true, + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dev": true, + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-load-config": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.0.1.tgz", + "integrity": "sha512-/pDHe30UYZUD11IeG8GWx9lNtu1ToyTsZHnyy45B4Mrwr/Kb6NgYl7k753+05CJNKnjbwh4975amoPJ+TEjHNQ==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "import-cwd": "^3.0.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "postcss-loader": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.2.0.tgz", + "integrity": "sha512-uSuCkENFeUaOYsKrXm0eNNgVIxc71z8RcckLMbVw473rGojFnrUeqEz6zBgXsH2q1EIzXnO/4pEz9RhALjlITA==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "semver": "^7.3.4" + }, + "dependencies": { + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-selector-parser": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz", + "integrity": "sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } + } + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "rechoir": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", + "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "resolve-url-loader": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", + "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "3.0.0", + "camelcase": "5.3.1", + "compose-function": "3.0.3", + "convert-source-map": "1.7.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.21", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "postcss": { + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", + "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "dev": true, + "requires": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", + "dev": true + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.32.12", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.12.tgz", + "integrity": "sha512-zmXn03k3hN0KaiVTjohgkg98C3UowhL1/VSGdj4/VAAiMKGQOE80PFPxFP2Kyq0OUskPKcY5lImkhBKEHlypJA==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0" + } + }, + "sass-loader": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-11.1.0.tgz", + "integrity": "sha512-TS8KtLtMAqK68lBs0PRzoGf7ndz9m7pKo4BXvUzjGDDgWEY0qcoMMRVpaHfYM0i3/E6UsererqIpjs7dVA/p7A==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "dev": true, + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "std-env": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz", + "integrity": "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==", + "dev": true, + "requires": { + "ci-info": "^3.0.0" + } + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "dev": true + }, + "terser": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", + "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", + "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", + "dev": true, + "requires": { + "jest-worker": "^26.6.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.5.1" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "watchpack": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", + "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webpack": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.37.0.tgz", + "integrity": "sha512-yvdhgcI6QkQkDe1hINBAJ1UNevqNGTVaCkD2SSJcB8rcrNNl922RI8i2DXUAuNfANoxwsiXXEA4ZPZI9q2oGLA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.47", + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/wasm-edit": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "acorn": "^8.2.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.4.0", + "eslint-scope": "^5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.1", + "watchpack": "^2.0.0", + "webpack-sources": "^2.1.1" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", + "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", + "dev": true, + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + } + } + } + }, + "webpack-cli": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", + "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.0.3", + "@webpack-cli/info": "^1.2.4", + "@webpack-cli/serve": "^1.4.0", + "colorette": "^1.2.1", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "v8-compile-cache": "^2.2.0", + "webpack-merge": "^5.7.3" + } + }, + "webpack-dev-middleware": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.2.0.tgz", + "integrity": "sha512-HVVpHw+5H4lfGasUKjpIkOy9TB27OyKiL13c+dhzVG1w77OQ87b408fp0qKDKQQkNGgShbStDzVJ8sK46JajXg==", + "dev": true, + "requires": { + "colorette": "^1.2.2", + "mem": "^8.1.1", + "memfs": "^3.2.2", + "mime-types": "^2.1.30", + "range-parser": "^1.2.1", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-dev-server": { + "version": "4.0.0-beta.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.0.0-beta.2.tgz", + "integrity": "sha512-kbUAjQg1FLtCoIZ0NdcTZWRBVT1EDajBSvGAiAqQPJxBjsr0N3FQ57kJ/4SrIZPyAajn8kcHctwFsTKPwme1tQ==", + "dev": true, + "requires": { + "ansi-html": "^0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^3.5.1", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "del": "^6.0.0", + "express": "^4.17.1", + "find-cache-dir": "^3.3.1", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^1.1.0", + "internal-ip": "^6.2.0", + "ipaddr.js": "^2.0.0", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "open": "^7.4.2", + "p-retry": "^4.5.0", + "portfinder": "^1.0.28", + "schema-utils": "^3.0.0", + "selfsigned": "^1.10.8", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "spdy": "^4.0.2", + "strip-ansi": "^6.0.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^4.1.0", + "ws": "^7.4.4" + }, + "dependencies": { + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-merge": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", + "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-notifier": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.13.0.tgz", + "integrity": "sha512-QLk6l/TZKGhyN6Hd1zobaiYno7S9YPX3wH86+YOSufHes77SegGhnGdj+4vrLDFK5A4ZKoQD5GRXXFnM0h0N8A==", + "dev": true, + "requires": { + "node-notifier": "^9.0.0", + "strip-ansi": "^6.0.0" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "webpackbar": { + "version": "5.0.0-3", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", + "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.1.0", + "consola": "^2.15.0", + "figures": "^3.2.0", + "pretty-time": "^1.1.0", + "std-env": "^2.2.1", + "text-table": "^0.2.0", + "wrap-ansi": "^7.0.0" + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..ab92329 --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "private": true, + "scripts": { + "dev": "npm run development", + "development": "mix", + "watch": "mix watch", + "watch-poll": "mix watch -- --watch-options-poll=1000", + "hot": "mix watch --hot", + "prod": "npm run production", + "production": "mix --production" + }, + "devDependencies": { + "axios": "^0.21", + "bootstrap": "^4.6.0", + "jquery": "^3.6", + "laravel-mix": "^6.0.6", + "lodash": "^4.17.19", + "popper.js": "^1.16.1", + "postcss": "^8.1.14", + "resolve-url-loader": "^3.1.2", + "sass": "^1.32.11", + "sass-loader": "^11.0.1" + }, + "dependencies": { + "@fortawesome/fontawesome-free": "^5.15.3", + "@popperjs/core": "^2.10.2" + } +} diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..4ae4d97 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,31 @@ + + + + + ./tests/Unit + + + ./tests/Feature + + + + + ./app + + + + + + + + + + + + + + diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..3aec5e2 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,21 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/public/ForumC/skins/default/images/forum_status.gif b/public/ForumC/skins/default/images/forum_status.gif new file mode 100644 index 0000000..6b15ad0 Binary files /dev/null and b/public/ForumC/skins/default/images/forum_status.gif differ diff --git a/public/ForumC/skins/default/images/icon_mini_home.gif b/public/ForumC/skins/default/images/icon_mini_home.gif new file mode 100644 index 0000000..46a605e Binary files /dev/null and b/public/ForumC/skins/default/images/icon_mini_home.gif differ diff --git a/public/ForumC/skins/default/images/icon_mini_register.gif b/public/ForumC/skins/default/images/icon_mini_register.gif new file mode 100644 index 0000000..49502b8 Binary files /dev/null and b/public/ForumC/skins/default/images/icon_mini_register.gif differ diff --git a/public/ForumC/skins/default/images/icon_mini_search.gif b/public/ForumC/skins/default/images/icon_mini_search.gif new file mode 100644 index 0000000..704c41a Binary files /dev/null and b/public/ForumC/skins/default/images/icon_mini_search.gif differ diff --git a/public/ForumC/skins/default/images/icon_mini_topic.gif b/public/ForumC/skins/default/images/icon_mini_topic.gif new file mode 100644 index 0000000..89fd9be Binary files /dev/null and b/public/ForumC/skins/default/images/icon_mini_topic.gif differ diff --git a/public/ForumC/skins/default/images/newpost.gif b/public/ForumC/skins/default/images/newpost.gif new file mode 100644 index 0000000..b9d35ec Binary files /dev/null and b/public/ForumC/skins/default/images/newpost.gif differ diff --git a/public/ForumC/skins/default/images/newtopic.gif b/public/ForumC/skins/default/images/newtopic.gif new file mode 100644 index 0000000..af9bfd7 Binary files /dev/null and b/public/ForumC/skins/default/images/newtopic.gif differ diff --git a/public/ForumC/skins/default/images/topic-popular.gif b/public/ForumC/skins/default/images/topic-popular.gif new file mode 100644 index 0000000..9e58a2e Binary files /dev/null and b/public/ForumC/skins/default/images/topic-popular.gif differ diff --git a/public/ForumC/skins/default/images/topic_notread.gif b/public/ForumC/skins/default/images/topic_notread.gif new file mode 100644 index 0000000..31ecdcc Binary files /dev/null and b/public/ForumC/skins/default/images/topic_notread.gif differ diff --git a/public/ForumC/skins/default/images/user_IsOffline.gif b/public/ForumC/skins/default/images/user_IsOffline.gif new file mode 100644 index 0000000..e5d210a Binary files /dev/null and b/public/ForumC/skins/default/images/user_IsOffline.gif differ diff --git a/public/ForumC/skins/default/images/user_IsOnline.gif b/public/ForumC/skins/default/images/user_IsOnline.gif new file mode 100644 index 0000000..bb737b7 Binary files /dev/null and b/public/ForumC/skins/default/images/user_IsOnline.gif differ diff --git a/public/ForumC/skins/default/images/users_moderator.gif b/public/ForumC/skins/default/images/users_moderator.gif new file mode 100644 index 0000000..86d782c Binary files /dev/null and b/public/ForumC/skins/default/images/users_moderator.gif differ diff --git a/public/audio/cans.mp3 b/public/audio/cans.mp3 new file mode 100644 index 0000000..a4a4e34 Binary files /dev/null and b/public/audio/cans.mp3 differ diff --git a/public/clientdl/tadah.zip b/public/clientdl/tadah.zip new file mode 100644 index 0000000..aa9f78b Binary files /dev/null and b/public/clientdl/tadah.zip differ diff --git a/public/css/app.css b/public/css/app.css new file mode 100644 index 0000000..b7bf255 --- /dev/null +++ b/public/css/app.css @@ -0,0 +1,17142 @@ +@charset "UTF-8"; +/*! + * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa, +.fas, +.far, +.fal, +.fad, +.fab { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; +} + +.fa-lg { + font-size: 1.3333333333em; + line-height: 0.75em; + vertical-align: -0.0667em; +} + +.fa-xs { + font-size: 0.75em; +} + +.fa-sm { + font-size: 0.875em; +} + +.fa-1x { + font-size: 1em; +} + +.fa-2x { + font-size: 2em; +} + +.fa-3x { + font-size: 3em; +} + +.fa-4x { + font-size: 4em; +} + +.fa-5x { + font-size: 5em; +} + +.fa-6x { + font-size: 6em; +} + +.fa-7x { + font-size: 7em; +} + +.fa-8x { + font-size: 8em; +} + +.fa-9x { + font-size: 9em; +} + +.fa-10x { + font-size: 10em; +} + +.fa-fw { + text-align: center; + width: 1.25em; +} + +.fa-ul { + list-style-type: none; + margin-left: 2.5em; + padding-left: 0; +} +.fa-ul > li { + position: relative; +} + +.fa-li { + left: -2em; + position: absolute; + text-align: center; + width: 2em; + line-height: inherit; +} + +.fa-border { + border: solid 0.08em #eee; + border-radius: 0.1em; + padding: 0.2em 0.25em 0.15em; +} + +.fa-pull-left { + float: left; +} + +.fa-pull-right { + float: right; +} + +.fa.fa-pull-left, +.fas.fa-pull-left, +.far.fa-pull-left, +.fal.fa-pull-left, +.fab.fa-pull-left { + margin-right: 0.3em; +} +.fa.fa-pull-right, +.fas.fa-pull-right, +.far.fa-pull-right, +.fal.fa-pull-right, +.fab.fa-pull-right { + margin-left: 0.3em; +} + +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} + +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} + +@-webkit-keyframes fa-spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +@keyframes fa-spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + transform: rotate(90deg); +} + +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + transform: rotate(180deg); +} + +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + transform: rotate(270deg); +} + +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + transform: scale(-1, 1); +} + +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + transform: scale(1, -1); +} + +.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + transform: scale(-1, -1); +} + +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical, +:root .fa-flip-both { + filter: none; +} + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; +} + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; +} + +.fa-stack-1x { + line-height: inherit; +} + +.fa-stack-2x { + font-size: 2em; +} + +.fa-inverse { + color: #fff; +} + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ +.fa-500px:before { + content: ""; +} + +.fa-accessible-icon:before { + content: ""; +} + +.fa-accusoft:before { + content: ""; +} + +.fa-acquisitions-incorporated:before { + content: ""; +} + +.fa-ad:before { + content: ""; +} + +.fa-address-book:before { + content: ""; +} + +.fa-address-card:before { + content: ""; +} + +.fa-adjust:before { + content: ""; +} + +.fa-adn:before { + content: ""; +} + +.fa-adversal:before { + content: ""; +} + +.fa-affiliatetheme:before { + content: ""; +} + +.fa-air-freshener:before { + content: ""; +} + +.fa-airbnb:before { + content: ""; +} + +.fa-algolia:before { + content: ""; +} + +.fa-align-center:before { + content: ""; +} + +.fa-align-justify:before { + content: ""; +} + +.fa-align-left:before { + content: ""; +} + +.fa-align-right:before { + content: ""; +} + +.fa-alipay:before { + content: ""; +} + +.fa-allergies:before { + content: ""; +} + +.fa-amazon:before { + content: ""; +} + +.fa-amazon-pay:before { + content: ""; +} + +.fa-ambulance:before { + content: ""; +} + +.fa-american-sign-language-interpreting:before { + content: ""; +} + +.fa-amilia:before { + content: ""; +} + +.fa-anchor:before { + content: ""; +} + +.fa-android:before { + content: ""; +} + +.fa-angellist:before { + content: ""; +} + +.fa-angle-double-down:before { + content: ""; +} + +.fa-angle-double-left:before { + content: ""; +} + +.fa-angle-double-right:before { + content: ""; +} + +.fa-angle-double-up:before { + content: ""; +} + +.fa-angle-down:before { + content: ""; +} + +.fa-angle-left:before { + content: ""; +} + +.fa-angle-right:before { + content: ""; +} + +.fa-angle-up:before { + content: ""; +} + +.fa-angry:before { + content: ""; +} + +.fa-angrycreative:before { + content: ""; +} + +.fa-angular:before { + content: ""; +} + +.fa-ankh:before { + content: ""; +} + +.fa-app-store:before { + content: ""; +} + +.fa-app-store-ios:before { + content: ""; +} + +.fa-apper:before { + content: ""; +} + +.fa-apple:before { + content: ""; +} + +.fa-apple-alt:before { + content: ""; +} + +.fa-apple-pay:before { + content: ""; +} + +.fa-archive:before { + content: ""; +} + +.fa-archway:before { + content: ""; +} + +.fa-arrow-alt-circle-down:before { + content: ""; +} + +.fa-arrow-alt-circle-left:before { + content: ""; +} + +.fa-arrow-alt-circle-right:before { + content: ""; +} + +.fa-arrow-alt-circle-up:before { + content: ""; +} + +.fa-arrow-circle-down:before { + content: ""; +} + +.fa-arrow-circle-left:before { + content: ""; +} + +.fa-arrow-circle-right:before { + content: ""; +} + +.fa-arrow-circle-up:before { + content: ""; +} + +.fa-arrow-down:before { + content: ""; +} + +.fa-arrow-left:before { + content: ""; +} + +.fa-arrow-right:before { + content: ""; +} + +.fa-arrow-up:before { + content: ""; +} + +.fa-arrows-alt:before { + content: ""; +} + +.fa-arrows-alt-h:before { + content: ""; +} + +.fa-arrows-alt-v:before { + content: ""; +} + +.fa-artstation:before { + content: ""; +} + +.fa-assistive-listening-systems:before { + content: ""; +} + +.fa-asterisk:before { + content: ""; +} + +.fa-asymmetrik:before { + content: ""; +} + +.fa-at:before { + content: ""; +} + +.fa-atlas:before { + content: ""; +} + +.fa-atlassian:before { + content: ""; +} + +.fa-atom:before { + content: ""; +} + +.fa-audible:before { + content: ""; +} + +.fa-audio-description:before { + content: ""; +} + +.fa-autoprefixer:before { + content: ""; +} + +.fa-avianex:before { + content: ""; +} + +.fa-aviato:before { + content: ""; +} + +.fa-award:before { + content: ""; +} + +.fa-aws:before { + content: ""; +} + +.fa-baby:before { + content: ""; +} + +.fa-baby-carriage:before { + content: ""; +} + +.fa-backspace:before { + content: ""; +} + +.fa-backward:before { + content: ""; +} + +.fa-bacon:before { + content: ""; +} + +.fa-bacteria:before { + content: ""; +} + +.fa-bacterium:before { + content: ""; +} + +.fa-bahai:before { + content: ""; +} + +.fa-balance-scale:before { + content: ""; +} + +.fa-balance-scale-left:before { + content: ""; +} + +.fa-balance-scale-right:before { + content: ""; +} + +.fa-ban:before { + content: ""; +} + +.fa-band-aid:before { + content: ""; +} + +.fa-bandcamp:before { + content: ""; +} + +.fa-barcode:before { + content: ""; +} + +.fa-bars:before { + content: ""; +} + +.fa-baseball-ball:before { + content: ""; +} + +.fa-basketball-ball:before { + content: ""; +} + +.fa-bath:before { + content: ""; +} + +.fa-battery-empty:before { + content: ""; +} + +.fa-battery-full:before { + content: ""; +} + +.fa-battery-half:before { + content: ""; +} + +.fa-battery-quarter:before { + content: ""; +} + +.fa-battery-three-quarters:before { + content: ""; +} + +.fa-battle-net:before { + content: ""; +} + +.fa-bed:before { + content: ""; +} + +.fa-beer:before { + content: ""; +} + +.fa-behance:before { + content: ""; +} + +.fa-behance-square:before { + content: ""; +} + +.fa-bell:before { + content: ""; +} + +.fa-bell-slash:before { + content: ""; +} + +.fa-bezier-curve:before { + content: ""; +} + +.fa-bible:before { + content: ""; +} + +.fa-bicycle:before { + content: ""; +} + +.fa-biking:before { + content: ""; +} + +.fa-bimobject:before { + content: ""; +} + +.fa-binoculars:before { + content: ""; +} + +.fa-biohazard:before { + content: ""; +} + +.fa-birthday-cake:before { + content: ""; +} + +.fa-bitbucket:before { + content: ""; +} + +.fa-bitcoin:before { + content: ""; +} + +.fa-bity:before { + content: ""; +} + +.fa-black-tie:before { + content: ""; +} + +.fa-blackberry:before { + content: ""; +} + +.fa-blender:before { + content: ""; +} + +.fa-blender-phone:before { + content: ""; +} + +.fa-blind:before { + content: ""; +} + +.fa-blog:before { + content: ""; +} + +.fa-blogger:before { + content: ""; +} + +.fa-blogger-b:before { + content: ""; +} + +.fa-bluetooth:before { + content: ""; +} + +.fa-bluetooth-b:before { + content: ""; +} + +.fa-bold:before { + content: ""; +} + +.fa-bolt:before { + content: ""; +} + +.fa-bomb:before { + content: ""; +} + +.fa-bone:before { + content: ""; +} + +.fa-bong:before { + content: ""; +} + +.fa-book:before { + content: ""; +} + +.fa-book-dead:before { + content: ""; +} + +.fa-book-medical:before { + content: ""; +} + +.fa-book-open:before { + content: ""; +} + +.fa-book-reader:before { + content: ""; +} + +.fa-bookmark:before { + content: ""; +} + +.fa-bootstrap:before { + content: ""; +} + +.fa-border-all:before { + content: ""; +} + +.fa-border-none:before { + content: ""; +} + +.fa-border-style:before { + content: ""; +} + +.fa-bowling-ball:before { + content: ""; +} + +.fa-box:before { + content: ""; +} + +.fa-box-open:before { + content: ""; +} + +.fa-box-tissue:before { + content: ""; +} + +.fa-boxes:before { + content: ""; +} + +.fa-braille:before { + content: ""; +} + +.fa-brain:before { + content: ""; +} + +.fa-bread-slice:before { + content: ""; +} + +.fa-briefcase:before { + content: ""; +} + +.fa-briefcase-medical:before { + content: ""; +} + +.fa-broadcast-tower:before { + content: ""; +} + +.fa-broom:before { + content: ""; +} + +.fa-brush:before { + content: ""; +} + +.fa-btc:before { + content: ""; +} + +.fa-buffer:before { + content: ""; +} + +.fa-bug:before { + content: ""; +} + +.fa-building:before { + content: ""; +} + +.fa-bullhorn:before { + content: ""; +} + +.fa-bullseye:before { + content: ""; +} + +.fa-burn:before { + content: ""; +} + +.fa-buromobelexperte:before { + content: ""; +} + +.fa-bus:before { + content: ""; +} + +.fa-bus-alt:before { + content: ""; +} + +.fa-business-time:before { + content: ""; +} + +.fa-buy-n-large:before { + content: ""; +} + +.fa-buysellads:before { + content: ""; +} + +.fa-calculator:before { + content: ""; +} + +.fa-calendar:before { + content: ""; +} + +.fa-calendar-alt:before { + content: ""; +} + +.fa-calendar-check:before { + content: ""; +} + +.fa-calendar-day:before { + content: ""; +} + +.fa-calendar-minus:before { + content: ""; +} + +.fa-calendar-plus:before { + content: ""; +} + +.fa-calendar-times:before { + content: ""; +} + +.fa-calendar-week:before { + content: ""; +} + +.fa-camera:before { + content: ""; +} + +.fa-camera-retro:before { + content: ""; +} + +.fa-campground:before { + content: ""; +} + +.fa-canadian-maple-leaf:before { + content: ""; +} + +.fa-candy-cane:before { + content: ""; +} + +.fa-cannabis:before { + content: ""; +} + +.fa-capsules:before { + content: ""; +} + +.fa-car:before { + content: ""; +} + +.fa-car-alt:before { + content: ""; +} + +.fa-car-battery:before { + content: ""; +} + +.fa-car-crash:before { + content: ""; +} + +.fa-car-side:before { + content: ""; +} + +.fa-caravan:before { + content: ""; +} + +.fa-caret-down:before { + content: ""; +} + +.fa-caret-left:before { + content: ""; +} + +.fa-caret-right:before { + content: ""; +} + +.fa-caret-square-down:before { + content: ""; +} + +.fa-caret-square-left:before { + content: ""; +} + +.fa-caret-square-right:before { + content: ""; +} + +.fa-caret-square-up:before { + content: ""; +} + +.fa-caret-up:before { + content: ""; +} + +.fa-carrot:before { + content: ""; +} + +.fa-cart-arrow-down:before { + content: ""; +} + +.fa-cart-plus:before { + content: ""; +} + +.fa-cash-register:before { + content: ""; +} + +.fa-cat:before { + content: ""; +} + +.fa-cc-amazon-pay:before { + content: ""; +} + +.fa-cc-amex:before { + content: ""; +} + +.fa-cc-apple-pay:before { + content: ""; +} + +.fa-cc-diners-club:before { + content: ""; +} + +.fa-cc-discover:before { + content: ""; +} + +.fa-cc-jcb:before { + content: ""; +} + +.fa-cc-mastercard:before { + content: ""; +} + +.fa-cc-paypal:before { + content: ""; +} + +.fa-cc-stripe:before { + content: ""; +} + +.fa-cc-visa:before { + content: ""; +} + +.fa-centercode:before { + content: ""; +} + +.fa-centos:before { + content: ""; +} + +.fa-certificate:before { + content: ""; +} + +.fa-chair:before { + content: ""; +} + +.fa-chalkboard:before { + content: ""; +} + +.fa-chalkboard-teacher:before { + content: ""; +} + +.fa-charging-station:before { + content: ""; +} + +.fa-chart-area:before { + content: ""; +} + +.fa-chart-bar:before { + content: ""; +} + +.fa-chart-line:before { + content: ""; +} + +.fa-chart-pie:before { + content: ""; +} + +.fa-check:before { + content: ""; +} + +.fa-check-circle:before { + content: ""; +} + +.fa-check-double:before { + content: ""; +} + +.fa-check-square:before { + content: ""; +} + +.fa-cheese:before { + content: ""; +} + +.fa-chess:before { + content: ""; +} + +.fa-chess-bishop:before { + content: ""; +} + +.fa-chess-board:before { + content: ""; +} + +.fa-chess-king:before { + content: ""; +} + +.fa-chess-knight:before { + content: ""; +} + +.fa-chess-pawn:before { + content: ""; +} + +.fa-chess-queen:before { + content: ""; +} + +.fa-chess-rook:before { + content: ""; +} + +.fa-chevron-circle-down:before { + content: ""; +} + +.fa-chevron-circle-left:before { + content: ""; +} + +.fa-chevron-circle-right:before { + content: ""; +} + +.fa-chevron-circle-up:before { + content: ""; +} + +.fa-chevron-down:before { + content: ""; +} + +.fa-chevron-left:before { + content: ""; +} + +.fa-chevron-right:before { + content: ""; +} + +.fa-chevron-up:before { + content: ""; +} + +.fa-child:before { + content: ""; +} + +.fa-chrome:before { + content: ""; +} + +.fa-chromecast:before { + content: ""; +} + +.fa-church:before { + content: ""; +} + +.fa-circle:before { + content: ""; +} + +.fa-circle-notch:before { + content: ""; +} + +.fa-city:before { + content: ""; +} + +.fa-clinic-medical:before { + content: ""; +} + +.fa-clipboard:before { + content: ""; +} + +.fa-clipboard-check:before { + content: ""; +} + +.fa-clipboard-list:before { + content: ""; +} + +.fa-clock:before { + content: ""; +} + +.fa-clone:before { + content: ""; +} + +.fa-closed-captioning:before { + content: ""; +} + +.fa-cloud:before { + content: ""; +} + +.fa-cloud-download-alt:before { + content: ""; +} + +.fa-cloud-meatball:before { + content: ""; +} + +.fa-cloud-moon:before { + content: ""; +} + +.fa-cloud-moon-rain:before { + content: ""; +} + +.fa-cloud-rain:before { + content: ""; +} + +.fa-cloud-showers-heavy:before { + content: ""; +} + +.fa-cloud-sun:before { + content: ""; +} + +.fa-cloud-sun-rain:before { + content: ""; +} + +.fa-cloud-upload-alt:before { + content: ""; +} + +.fa-cloudflare:before { + content: ""; +} + +.fa-cloudscale:before { + content: ""; +} + +.fa-cloudsmith:before { + content: ""; +} + +.fa-cloudversify:before { + content: ""; +} + +.fa-cocktail:before { + content: ""; +} + +.fa-code:before { + content: ""; +} + +.fa-code-branch:before { + content: ""; +} + +.fa-codepen:before { + content: ""; +} + +.fa-codiepie:before { + content: ""; +} + +.fa-coffee:before { + content: ""; +} + +.fa-cog:before { + content: ""; +} + +.fa-cogs:before { + content: ""; +} + +.fa-coins:before { + content: ""; +} + +.fa-columns:before { + content: ""; +} + +.fa-comment:before { + content: ""; +} + +.fa-comment-alt:before { + content: ""; +} + +.fa-comment-dollar:before { + content: ""; +} + +.fa-comment-dots:before { + content: ""; +} + +.fa-comment-medical:before { + content: ""; +} + +.fa-comment-slash:before { + content: ""; +} + +.fa-comments:before { + content: ""; +} + +.fa-comments-dollar:before { + content: ""; +} + +.fa-compact-disc:before { + content: ""; +} + +.fa-compass:before { + content: ""; +} + +.fa-compress:before { + content: ""; +} + +.fa-compress-alt:before { + content: ""; +} + +.fa-compress-arrows-alt:before { + content: ""; +} + +.fa-concierge-bell:before { + content: ""; +} + +.fa-confluence:before { + content: ""; +} + +.fa-connectdevelop:before { + content: ""; +} + +.fa-contao:before { + content: ""; +} + +.fa-cookie:before { + content: ""; +} + +.fa-cookie-bite:before { + content: ""; +} + +.fa-copy:before { + content: ""; +} + +.fa-copyright:before { + content: ""; +} + +.fa-cotton-bureau:before { + content: ""; +} + +.fa-couch:before { + content: ""; +} + +.fa-cpanel:before { + content: ""; +} + +.fa-creative-commons:before { + content: ""; +} + +.fa-creative-commons-by:before { + content: ""; +} + +.fa-creative-commons-nc:before { + content: ""; +} + +.fa-creative-commons-nc-eu:before { + content: ""; +} + +.fa-creative-commons-nc-jp:before { + content: ""; +} + +.fa-creative-commons-nd:before { + content: ""; +} + +.fa-creative-commons-pd:before { + content: ""; +} + +.fa-creative-commons-pd-alt:before { + content: ""; +} + +.fa-creative-commons-remix:before { + content: ""; +} + +.fa-creative-commons-sa:before { + content: ""; +} + +.fa-creative-commons-sampling:before { + content: ""; +} + +.fa-creative-commons-sampling-plus:before { + content: ""; +} + +.fa-creative-commons-share:before { + content: ""; +} + +.fa-creative-commons-zero:before { + content: ""; +} + +.fa-credit-card:before { + content: ""; +} + +.fa-critical-role:before { + content: ""; +} + +.fa-crop:before { + content: ""; +} + +.fa-crop-alt:before { + content: ""; +} + +.fa-cross:before { + content: ""; +} + +.fa-crosshairs:before { + content: ""; +} + +.fa-crow:before { + content: ""; +} + +.fa-crown:before { + content: ""; +} + +.fa-crutch:before { + content: ""; +} + +.fa-css3:before { + content: ""; +} + +.fa-css3-alt:before { + content: ""; +} + +.fa-cube:before { + content: ""; +} + +.fa-cubes:before { + content: ""; +} + +.fa-cut:before { + content: ""; +} + +.fa-cuttlefish:before { + content: ""; +} + +.fa-d-and-d:before { + content: ""; +} + +.fa-d-and-d-beyond:before { + content: ""; +} + +.fa-dailymotion:before { + content: ""; +} + +.fa-dashcube:before { + content: ""; +} + +.fa-database:before { + content: ""; +} + +.fa-deaf:before { + content: ""; +} + +.fa-deezer:before { + content: ""; +} + +.fa-delicious:before { + content: ""; +} + +.fa-democrat:before { + content: ""; +} + +.fa-deploydog:before { + content: ""; +} + +.fa-deskpro:before { + content: ""; +} + +.fa-desktop:before { + content: ""; +} + +.fa-dev:before { + content: ""; +} + +.fa-deviantart:before { + content: ""; +} + +.fa-dharmachakra:before { + content: ""; +} + +.fa-dhl:before { + content: ""; +} + +.fa-diagnoses:before { + content: ""; +} + +.fa-diaspora:before { + content: ""; +} + +.fa-dice:before { + content: ""; +} + +.fa-dice-d20:before { + content: ""; +} + +.fa-dice-d6:before { + content: ""; +} + +.fa-dice-five:before { + content: ""; +} + +.fa-dice-four:before { + content: ""; +} + +.fa-dice-one:before { + content: ""; +} + +.fa-dice-six:before { + content: ""; +} + +.fa-dice-three:before { + content: ""; +} + +.fa-dice-two:before { + content: ""; +} + +.fa-digg:before { + content: ""; +} + +.fa-digital-ocean:before { + content: ""; +} + +.fa-digital-tachograph:before { + content: ""; +} + +.fa-directions:before { + content: ""; +} + +.fa-discord:before { + content: ""; +} + +.fa-discourse:before { + content: ""; +} + +.fa-disease:before { + content: ""; +} + +.fa-divide:before { + content: ""; +} + +.fa-dizzy:before { + content: ""; +} + +.fa-dna:before { + content: ""; +} + +.fa-dochub:before { + content: ""; +} + +.fa-docker:before { + content: ""; +} + +.fa-dog:before { + content: ""; +} + +.fa-dollar-sign:before { + content: ""; +} + +.fa-dolly:before { + content: ""; +} + +.fa-dolly-flatbed:before { + content: ""; +} + +.fa-donate:before { + content: ""; +} + +.fa-door-closed:before { + content: ""; +} + +.fa-door-open:before { + content: ""; +} + +.fa-dot-circle:before { + content: ""; +} + +.fa-dove:before { + content: ""; +} + +.fa-download:before { + content: ""; +} + +.fa-draft2digital:before { + content: ""; +} + +.fa-drafting-compass:before { + content: ""; +} + +.fa-dragon:before { + content: ""; +} + +.fa-draw-polygon:before { + content: ""; +} + +.fa-dribbble:before { + content: ""; +} + +.fa-dribbble-square:before { + content: ""; +} + +.fa-dropbox:before { + content: ""; +} + +.fa-drum:before { + content: ""; +} + +.fa-drum-steelpan:before { + content: ""; +} + +.fa-drumstick-bite:before { + content: ""; +} + +.fa-drupal:before { + content: ""; +} + +.fa-dumbbell:before { + content: ""; +} + +.fa-dumpster:before { + content: ""; +} + +.fa-dumpster-fire:before { + content: ""; +} + +.fa-dungeon:before { + content: ""; +} + +.fa-dyalog:before { + content: ""; +} + +.fa-earlybirds:before { + content: ""; +} + +.fa-ebay:before { + content: ""; +} + +.fa-edge:before { + content: ""; +} + +.fa-edge-legacy:before { + content: ""; +} + +.fa-edit:before { + content: ""; +} + +.fa-egg:before { + content: ""; +} + +.fa-eject:before { + content: ""; +} + +.fa-elementor:before { + content: ""; +} + +.fa-ellipsis-h:before { + content: ""; +} + +.fa-ellipsis-v:before { + content: ""; +} + +.fa-ello:before { + content: ""; +} + +.fa-ember:before { + content: ""; +} + +.fa-empire:before { + content: ""; +} + +.fa-envelope:before { + content: ""; +} + +.fa-envelope-open:before { + content: ""; +} + +.fa-envelope-open-text:before { + content: ""; +} + +.fa-envelope-square:before { + content: ""; +} + +.fa-envira:before { + content: ""; +} + +.fa-equals:before { + content: ""; +} + +.fa-eraser:before { + content: ""; +} + +.fa-erlang:before { + content: ""; +} + +.fa-ethereum:before { + content: ""; +} + +.fa-ethernet:before { + content: ""; +} + +.fa-etsy:before { + content: ""; +} + +.fa-euro-sign:before { + content: ""; +} + +.fa-evernote:before { + content: ""; +} + +.fa-exchange-alt:before { + content: ""; +} + +.fa-exclamation:before { + content: ""; +} + +.fa-exclamation-circle:before { + content: ""; +} + +.fa-exclamation-triangle:before { + content: ""; +} + +.fa-expand:before { + content: ""; +} + +.fa-expand-alt:before { + content: ""; +} + +.fa-expand-arrows-alt:before { + content: ""; +} + +.fa-expeditedssl:before { + content: ""; +} + +.fa-external-link-alt:before { + content: ""; +} + +.fa-external-link-square-alt:before { + content: ""; +} + +.fa-eye:before { + content: ""; +} + +.fa-eye-dropper:before { + content: ""; +} + +.fa-eye-slash:before { + content: ""; +} + +.fa-facebook:before { + content: ""; +} + +.fa-facebook-f:before { + content: ""; +} + +.fa-facebook-messenger:before { + content: ""; +} + +.fa-facebook-square:before { + content: ""; +} + +.fa-fan:before { + content: ""; +} + +.fa-fantasy-flight-games:before { + content: ""; +} + +.fa-fast-backward:before { + content: ""; +} + +.fa-fast-forward:before { + content: ""; +} + +.fa-faucet:before { + content: ""; +} + +.fa-fax:before { + content: ""; +} + +.fa-feather:before { + content: ""; +} + +.fa-feather-alt:before { + content: ""; +} + +.fa-fedex:before { + content: ""; +} + +.fa-fedora:before { + content: ""; +} + +.fa-female:before { + content: ""; +} + +.fa-fighter-jet:before { + content: ""; +} + +.fa-figma:before { + content: ""; +} + +.fa-file:before { + content: ""; +} + +.fa-file-alt:before { + content: ""; +} + +.fa-file-archive:before { + content: ""; +} + +.fa-file-audio:before { + content: ""; +} + +.fa-file-code:before { + content: ""; +} + +.fa-file-contract:before { + content: ""; +} + +.fa-file-csv:before { + content: ""; +} + +.fa-file-download:before { + content: ""; +} + +.fa-file-excel:before { + content: ""; +} + +.fa-file-export:before { + content: ""; +} + +.fa-file-image:before { + content: ""; +} + +.fa-file-import:before { + content: ""; +} + +.fa-file-invoice:before { + content: ""; +} + +.fa-file-invoice-dollar:before { + content: ""; +} + +.fa-file-medical:before { + content: ""; +} + +.fa-file-medical-alt:before { + content: ""; +} + +.fa-file-pdf:before { + content: ""; +} + +.fa-file-powerpoint:before { + content: ""; +} + +.fa-file-prescription:before { + content: ""; +} + +.fa-file-signature:before { + content: ""; +} + +.fa-file-upload:before { + content: ""; +} + +.fa-file-video:before { + content: ""; +} + +.fa-file-word:before { + content: ""; +} + +.fa-fill:before { + content: ""; +} + +.fa-fill-drip:before { + content: ""; +} + +.fa-film:before { + content: ""; +} + +.fa-filter:before { + content: ""; +} + +.fa-fingerprint:before { + content: ""; +} + +.fa-fire:before { + content: ""; +} + +.fa-fire-alt:before { + content: ""; +} + +.fa-fire-extinguisher:before { + content: ""; +} + +.fa-firefox:before { + content: ""; +} + +.fa-firefox-browser:before { + content: ""; +} + +.fa-first-aid:before { + content: ""; +} + +.fa-first-order:before { + content: ""; +} + +.fa-first-order-alt:before { + content: ""; +} + +.fa-firstdraft:before { + content: ""; +} + +.fa-fish:before { + content: ""; +} + +.fa-fist-raised:before { + content: ""; +} + +.fa-flag:before { + content: ""; +} + +.fa-flag-checkered:before { + content: ""; +} + +.fa-flag-usa:before { + content: ""; +} + +.fa-flask:before { + content: ""; +} + +.fa-flickr:before { + content: ""; +} + +.fa-flipboard:before { + content: ""; +} + +.fa-flushed:before { + content: ""; +} + +.fa-fly:before { + content: ""; +} + +.fa-folder:before { + content: ""; +} + +.fa-folder-minus:before { + content: ""; +} + +.fa-folder-open:before { + content: ""; +} + +.fa-folder-plus:before { + content: ""; +} + +.fa-font:before { + content: ""; +} + +.fa-font-awesome:before { + content: ""; +} + +.fa-font-awesome-alt:before { + content: ""; +} + +.fa-font-awesome-flag:before { + content: ""; +} + +.fa-font-awesome-logo-full:before { + content: ""; +} + +.fa-fonticons:before { + content: ""; +} + +.fa-fonticons-fi:before { + content: ""; +} + +.fa-football-ball:before { + content: ""; +} + +.fa-fort-awesome:before { + content: ""; +} + +.fa-fort-awesome-alt:before { + content: ""; +} + +.fa-forumbee:before { + content: ""; +} + +.fa-forward:before { + content: ""; +} + +.fa-foursquare:before { + content: ""; +} + +.fa-free-code-camp:before { + content: ""; +} + +.fa-freebsd:before { + content: ""; +} + +.fa-frog:before { + content: ""; +} + +.fa-frown:before { + content: ""; +} + +.fa-frown-open:before { + content: ""; +} + +.fa-fulcrum:before { + content: ""; +} + +.fa-funnel-dollar:before { + content: ""; +} + +.fa-futbol:before { + content: ""; +} + +.fa-galactic-republic:before { + content: ""; +} + +.fa-galactic-senate:before { + content: ""; +} + +.fa-gamepad:before { + content: ""; +} + +.fa-gas-pump:before { + content: ""; +} + +.fa-gavel:before { + content: ""; +} + +.fa-gem:before { + content: ""; +} + +.fa-genderless:before { + content: ""; +} + +.fa-get-pocket:before { + content: ""; +} + +.fa-gg:before { + content: ""; +} + +.fa-gg-circle:before { + content: ""; +} + +.fa-ghost:before { + content: ""; +} + +.fa-gift:before { + content: ""; +} + +.fa-gifts:before { + content: ""; +} + +.fa-git:before { + content: ""; +} + +.fa-git-alt:before { + content: ""; +} + +.fa-git-square:before { + content: ""; +} + +.fa-github:before { + content: ""; +} + +.fa-github-alt:before { + content: ""; +} + +.fa-github-square:before { + content: ""; +} + +.fa-gitkraken:before { + content: ""; +} + +.fa-gitlab:before { + content: ""; +} + +.fa-gitter:before { + content: ""; +} + +.fa-glass-cheers:before { + content: ""; +} + +.fa-glass-martini:before { + content: ""; +} + +.fa-glass-martini-alt:before { + content: ""; +} + +.fa-glass-whiskey:before { + content: ""; +} + +.fa-glasses:before { + content: ""; +} + +.fa-glide:before { + content: ""; +} + +.fa-glide-g:before { + content: ""; +} + +.fa-globe:before { + content: ""; +} + +.fa-globe-africa:before { + content: ""; +} + +.fa-globe-americas:before { + content: ""; +} + +.fa-globe-asia:before { + content: ""; +} + +.fa-globe-europe:before { + content: ""; +} + +.fa-gofore:before { + content: ""; +} + +.fa-golf-ball:before { + content: ""; +} + +.fa-goodreads:before { + content: ""; +} + +.fa-goodreads-g:before { + content: ""; +} + +.fa-google:before { + content: ""; +} + +.fa-google-drive:before { + content: ""; +} + +.fa-google-pay:before { + content: ""; +} + +.fa-google-play:before { + content: ""; +} + +.fa-google-plus:before { + content: ""; +} + +.fa-google-plus-g:before { + content: ""; +} + +.fa-google-plus-square:before { + content: ""; +} + +.fa-google-wallet:before { + content: ""; +} + +.fa-gopuram:before { + content: ""; +} + +.fa-graduation-cap:before { + content: ""; +} + +.fa-gratipay:before { + content: ""; +} + +.fa-grav:before { + content: ""; +} + +.fa-greater-than:before { + content: ""; +} + +.fa-greater-than-equal:before { + content: ""; +} + +.fa-grimace:before { + content: ""; +} + +.fa-grin:before { + content: ""; +} + +.fa-grin-alt:before { + content: ""; +} + +.fa-grin-beam:before { + content: ""; +} + +.fa-grin-beam-sweat:before { + content: ""; +} + +.fa-grin-hearts:before { + content: ""; +} + +.fa-grin-squint:before { + content: ""; +} + +.fa-grin-squint-tears:before { + content: ""; +} + +.fa-grin-stars:before { + content: ""; +} + +.fa-grin-tears:before { + content: ""; +} + +.fa-grin-tongue:before { + content: ""; +} + +.fa-grin-tongue-squint:before { + content: ""; +} + +.fa-grin-tongue-wink:before { + content: ""; +} + +.fa-grin-wink:before { + content: ""; +} + +.fa-grip-horizontal:before { + content: ""; +} + +.fa-grip-lines:before { + content: ""; +} + +.fa-grip-lines-vertical:before { + content: ""; +} + +.fa-grip-vertical:before { + content: ""; +} + +.fa-gripfire:before { + content: ""; +} + +.fa-grunt:before { + content: ""; +} + +.fa-guilded:before { + content: ""; +} + +.fa-guitar:before { + content: ""; +} + +.fa-gulp:before { + content: ""; +} + +.fa-h-square:before { + content: ""; +} + +.fa-hacker-news:before { + content: ""; +} + +.fa-hacker-news-square:before { + content: ""; +} + +.fa-hackerrank:before { + content: ""; +} + +.fa-hamburger:before { + content: ""; +} + +.fa-hammer:before { + content: ""; +} + +.fa-hamsa:before { + content: ""; +} + +.fa-hand-holding:before { + content: ""; +} + +.fa-hand-holding-heart:before { + content: ""; +} + +.fa-hand-holding-medical:before { + content: ""; +} + +.fa-hand-holding-usd:before { + content: ""; +} + +.fa-hand-holding-water:before { + content: ""; +} + +.fa-hand-lizard:before { + content: ""; +} + +.fa-hand-middle-finger:before { + content: ""; +} + +.fa-hand-paper:before { + content: ""; +} + +.fa-hand-peace:before { + content: ""; +} + +.fa-hand-point-down:before { + content: ""; +} + +.fa-hand-point-left:before { + content: ""; +} + +.fa-hand-point-right:before { + content: ""; +} + +.fa-hand-point-up:before { + content: ""; +} + +.fa-hand-pointer:before { + content: ""; +} + +.fa-hand-rock:before { + content: ""; +} + +.fa-hand-scissors:before { + content: ""; +} + +.fa-hand-sparkles:before { + content: ""; +} + +.fa-hand-spock:before { + content: ""; +} + +.fa-hands:before { + content: ""; +} + +.fa-hands-helping:before { + content: ""; +} + +.fa-hands-wash:before { + content: ""; +} + +.fa-handshake:before { + content: ""; +} + +.fa-handshake-alt-slash:before { + content: ""; +} + +.fa-handshake-slash:before { + content: ""; +} + +.fa-hanukiah:before { + content: ""; +} + +.fa-hard-hat:before { + content: ""; +} + +.fa-hashtag:before { + content: ""; +} + +.fa-hat-cowboy:before { + content: ""; +} + +.fa-hat-cowboy-side:before { + content: ""; +} + +.fa-hat-wizard:before { + content: ""; +} + +.fa-hdd:before { + content: ""; +} + +.fa-head-side-cough:before { + content: ""; +} + +.fa-head-side-cough-slash:before { + content: ""; +} + +.fa-head-side-mask:before { + content: ""; +} + +.fa-head-side-virus:before { + content: ""; +} + +.fa-heading:before { + content: ""; +} + +.fa-headphones:before { + content: ""; +} + +.fa-headphones-alt:before { + content: ""; +} + +.fa-headset:before { + content: ""; +} + +.fa-heart:before { + content: ""; +} + +.fa-heart-broken:before { + content: ""; +} + +.fa-heartbeat:before { + content: ""; +} + +.fa-helicopter:before { + content: ""; +} + +.fa-highlighter:before { + content: ""; +} + +.fa-hiking:before { + content: ""; +} + +.fa-hippo:before { + content: ""; +} + +.fa-hips:before { + content: ""; +} + +.fa-hire-a-helper:before { + content: ""; +} + +.fa-history:before { + content: ""; +} + +.fa-hive:before { + content: ""; +} + +.fa-hockey-puck:before { + content: ""; +} + +.fa-holly-berry:before { + content: ""; +} + +.fa-home:before { + content: ""; +} + +.fa-hooli:before { + content: ""; +} + +.fa-hornbill:before { + content: ""; +} + +.fa-horse:before { + content: ""; +} + +.fa-horse-head:before { + content: ""; +} + +.fa-hospital:before { + content: ""; +} + +.fa-hospital-alt:before { + content: ""; +} + +.fa-hospital-symbol:before { + content: ""; +} + +.fa-hospital-user:before { + content: ""; +} + +.fa-hot-tub:before { + content: ""; +} + +.fa-hotdog:before { + content: ""; +} + +.fa-hotel:before { + content: ""; +} + +.fa-hotjar:before { + content: ""; +} + +.fa-hourglass:before { + content: ""; +} + +.fa-hourglass-end:before { + content: ""; +} + +.fa-hourglass-half:before { + content: ""; +} + +.fa-hourglass-start:before { + content: ""; +} + +.fa-house-damage:before { + content: ""; +} + +.fa-house-user:before { + content: ""; +} + +.fa-houzz:before { + content: ""; +} + +.fa-hryvnia:before { + content: ""; +} + +.fa-html5:before { + content: ""; +} + +.fa-hubspot:before { + content: ""; +} + +.fa-i-cursor:before { + content: ""; +} + +.fa-ice-cream:before { + content: ""; +} + +.fa-icicles:before { + content: ""; +} + +.fa-icons:before { + content: ""; +} + +.fa-id-badge:before { + content: ""; +} + +.fa-id-card:before { + content: ""; +} + +.fa-id-card-alt:before { + content: ""; +} + +.fa-ideal:before { + content: ""; +} + +.fa-igloo:before { + content: ""; +} + +.fa-image:before { + content: ""; +} + +.fa-images:before { + content: ""; +} + +.fa-imdb:before { + content: ""; +} + +.fa-inbox:before { + content: ""; +} + +.fa-indent:before { + content: ""; +} + +.fa-industry:before { + content: ""; +} + +.fa-infinity:before { + content: ""; +} + +.fa-info:before { + content: ""; +} + +.fa-info-circle:before { + content: ""; +} + +.fa-innosoft:before { + content: ""; +} + +.fa-instagram:before { + content: ""; +} + +.fa-instagram-square:before { + content: ""; +} + +.fa-instalod:before { + content: ""; +} + +.fa-intercom:before { + content: ""; +} + +.fa-internet-explorer:before { + content: ""; +} + +.fa-invision:before { + content: ""; +} + +.fa-ioxhost:before { + content: ""; +} + +.fa-italic:before { + content: ""; +} + +.fa-itch-io:before { + content: ""; +} + +.fa-itunes:before { + content: ""; +} + +.fa-itunes-note:before { + content: ""; +} + +.fa-java:before { + content: ""; +} + +.fa-jedi:before { + content: ""; +} + +.fa-jedi-order:before { + content: ""; +} + +.fa-jenkins:before { + content: ""; +} + +.fa-jira:before { + content: ""; +} + +.fa-joget:before { + content: ""; +} + +.fa-joint:before { + content: ""; +} + +.fa-joomla:before { + content: ""; +} + +.fa-journal-whills:before { + content: ""; +} + +.fa-js:before { + content: ""; +} + +.fa-js-square:before { + content: ""; +} + +.fa-jsfiddle:before { + content: ""; +} + +.fa-kaaba:before { + content: ""; +} + +.fa-kaggle:before { + content: ""; +} + +.fa-key:before { + content: ""; +} + +.fa-keybase:before { + content: ""; +} + +.fa-keyboard:before { + content: ""; +} + +.fa-keycdn:before { + content: ""; +} + +.fa-khanda:before { + content: ""; +} + +.fa-kickstarter:before { + content: ""; +} + +.fa-kickstarter-k:before { + content: ""; +} + +.fa-kiss:before { + content: ""; +} + +.fa-kiss-beam:before { + content: ""; +} + +.fa-kiss-wink-heart:before { + content: ""; +} + +.fa-kiwi-bird:before { + content: ""; +} + +.fa-korvue:before { + content: ""; +} + +.fa-landmark:before { + content: ""; +} + +.fa-language:before { + content: ""; +} + +.fa-laptop:before { + content: ""; +} + +.fa-laptop-code:before { + content: ""; +} + +.fa-laptop-house:before { + content: ""; +} + +.fa-laptop-medical:before { + content: ""; +} + +.fa-laravel:before { + content: ""; +} + +.fa-lastfm:before { + content: ""; +} + +.fa-lastfm-square:before { + content: ""; +} + +.fa-laugh:before { + content: ""; +} + +.fa-laugh-beam:before { + content: ""; +} + +.fa-laugh-squint:before { + content: ""; +} + +.fa-laugh-wink:before { + content: ""; +} + +.fa-layer-group:before { + content: ""; +} + +.fa-leaf:before { + content: ""; +} + +.fa-leanpub:before { + content: ""; +} + +.fa-lemon:before { + content: ""; +} + +.fa-less:before { + content: ""; +} + +.fa-less-than:before { + content: ""; +} + +.fa-less-than-equal:before { + content: ""; +} + +.fa-level-down-alt:before { + content: ""; +} + +.fa-level-up-alt:before { + content: ""; +} + +.fa-life-ring:before { + content: ""; +} + +.fa-lightbulb:before { + content: ""; +} + +.fa-line:before { + content: ""; +} + +.fa-link:before { + content: ""; +} + +.fa-linkedin:before { + content: ""; +} + +.fa-linkedin-in:before { + content: ""; +} + +.fa-linode:before { + content: ""; +} + +.fa-linux:before { + content: ""; +} + +.fa-lira-sign:before { + content: ""; +} + +.fa-list:before { + content: ""; +} + +.fa-list-alt:before { + content: ""; +} + +.fa-list-ol:before { + content: ""; +} + +.fa-list-ul:before { + content: ""; +} + +.fa-location-arrow:before { + content: ""; +} + +.fa-lock:before { + content: ""; +} + +.fa-lock-open:before { + content: ""; +} + +.fa-long-arrow-alt-down:before { + content: ""; +} + +.fa-long-arrow-alt-left:before { + content: ""; +} + +.fa-long-arrow-alt-right:before { + content: ""; +} + +.fa-long-arrow-alt-up:before { + content: ""; +} + +.fa-low-vision:before { + content: ""; +} + +.fa-luggage-cart:before { + content: ""; +} + +.fa-lungs:before { + content: ""; +} + +.fa-lungs-virus:before { + content: ""; +} + +.fa-lyft:before { + content: ""; +} + +.fa-magento:before { + content: ""; +} + +.fa-magic:before { + content: ""; +} + +.fa-magnet:before { + content: ""; +} + +.fa-mail-bulk:before { + content: ""; +} + +.fa-mailchimp:before { + content: ""; +} + +.fa-male:before { + content: ""; +} + +.fa-mandalorian:before { + content: ""; +} + +.fa-map:before { + content: ""; +} + +.fa-map-marked:before { + content: ""; +} + +.fa-map-marked-alt:before { + content: ""; +} + +.fa-map-marker:before { + content: ""; +} + +.fa-map-marker-alt:before { + content: ""; +} + +.fa-map-pin:before { + content: ""; +} + +.fa-map-signs:before { + content: ""; +} + +.fa-markdown:before { + content: ""; +} + +.fa-marker:before { + content: ""; +} + +.fa-mars:before { + content: ""; +} + +.fa-mars-double:before { + content: ""; +} + +.fa-mars-stroke:before { + content: ""; +} + +.fa-mars-stroke-h:before { + content: ""; +} + +.fa-mars-stroke-v:before { + content: ""; +} + +.fa-mask:before { + content: ""; +} + +.fa-mastodon:before { + content: ""; +} + +.fa-maxcdn:before { + content: ""; +} + +.fa-mdb:before { + content: ""; +} + +.fa-medal:before { + content: ""; +} + +.fa-medapps:before { + content: ""; +} + +.fa-medium:before { + content: ""; +} + +.fa-medium-m:before { + content: ""; +} + +.fa-medkit:before { + content: ""; +} + +.fa-medrt:before { + content: ""; +} + +.fa-meetup:before { + content: ""; +} + +.fa-megaport:before { + content: ""; +} + +.fa-meh:before { + content: ""; +} + +.fa-meh-blank:before { + content: ""; +} + +.fa-meh-rolling-eyes:before { + content: ""; +} + +.fa-memory:before { + content: ""; +} + +.fa-mendeley:before { + content: ""; +} + +.fa-menorah:before { + content: ""; +} + +.fa-mercury:before { + content: ""; +} + +.fa-meteor:before { + content: ""; +} + +.fa-microblog:before { + content: ""; +} + +.fa-microchip:before { + content: ""; +} + +.fa-microphone:before { + content: ""; +} + +.fa-microphone-alt:before { + content: ""; +} + +.fa-microphone-alt-slash:before { + content: ""; +} + +.fa-microphone-slash:before { + content: ""; +} + +.fa-microscope:before { + content: ""; +} + +.fa-microsoft:before { + content: ""; +} + +.fa-minus:before { + content: ""; +} + +.fa-minus-circle:before { + content: ""; +} + +.fa-minus-square:before { + content: ""; +} + +.fa-mitten:before { + content: ""; +} + +.fa-mix:before { + content: ""; +} + +.fa-mixcloud:before { + content: ""; +} + +.fa-mixer:before { + content: ""; +} + +.fa-mizuni:before { + content: ""; +} + +.fa-mobile:before { + content: ""; +} + +.fa-mobile-alt:before { + content: ""; +} + +.fa-modx:before { + content: ""; +} + +.fa-monero:before { + content: ""; +} + +.fa-money-bill:before { + content: ""; +} + +.fa-money-bill-alt:before { + content: ""; +} + +.fa-money-bill-wave:before { + content: ""; +} + +.fa-money-bill-wave-alt:before { + content: ""; +} + +.fa-money-check:before { + content: ""; +} + +.fa-money-check-alt:before { + content: ""; +} + +.fa-monument:before { + content: ""; +} + +.fa-moon:before { + content: ""; +} + +.fa-mortar-pestle:before { + content: ""; +} + +.fa-mosque:before { + content: ""; +} + +.fa-motorcycle:before { + content: ""; +} + +.fa-mountain:before { + content: ""; +} + +.fa-mouse:before { + content: ""; +} + +.fa-mouse-pointer:before { + content: ""; +} + +.fa-mug-hot:before { + content: ""; +} + +.fa-music:before { + content: ""; +} + +.fa-napster:before { + content: ""; +} + +.fa-neos:before { + content: ""; +} + +.fa-network-wired:before { + content: ""; +} + +.fa-neuter:before { + content: ""; +} + +.fa-newspaper:before { + content: ""; +} + +.fa-nimblr:before { + content: ""; +} + +.fa-node:before { + content: ""; +} + +.fa-node-js:before { + content: ""; +} + +.fa-not-equal:before { + content: ""; +} + +.fa-notes-medical:before { + content: ""; +} + +.fa-npm:before { + content: ""; +} + +.fa-ns8:before { + content: ""; +} + +.fa-nutritionix:before { + content: ""; +} + +.fa-object-group:before { + content: ""; +} + +.fa-object-ungroup:before { + content: ""; +} + +.fa-octopus-deploy:before { + content: ""; +} + +.fa-odnoklassniki:before { + content: ""; +} + +.fa-odnoklassniki-square:before { + content: ""; +} + +.fa-oil-can:before { + content: ""; +} + +.fa-old-republic:before { + content: ""; +} + +.fa-om:before { + content: ""; +} + +.fa-opencart:before { + content: ""; +} + +.fa-openid:before { + content: ""; +} + +.fa-opera:before { + content: ""; +} + +.fa-optin-monster:before { + content: ""; +} + +.fa-orcid:before { + content: ""; +} + +.fa-osi:before { + content: ""; +} + +.fa-otter:before { + content: ""; +} + +.fa-outdent:before { + content: ""; +} + +.fa-page4:before { + content: ""; +} + +.fa-pagelines:before { + content: ""; +} + +.fa-pager:before { + content: ""; +} + +.fa-paint-brush:before { + content: ""; +} + +.fa-paint-roller:before { + content: ""; +} + +.fa-palette:before { + content: ""; +} + +.fa-palfed:before { + content: ""; +} + +.fa-pallet:before { + content: ""; +} + +.fa-paper-plane:before { + content: ""; +} + +.fa-paperclip:before { + content: ""; +} + +.fa-parachute-box:before { + content: ""; +} + +.fa-paragraph:before { + content: ""; +} + +.fa-parking:before { + content: ""; +} + +.fa-passport:before { + content: ""; +} + +.fa-pastafarianism:before { + content: ""; +} + +.fa-paste:before { + content: ""; +} + +.fa-patreon:before { + content: ""; +} + +.fa-pause:before { + content: ""; +} + +.fa-pause-circle:before { + content: ""; +} + +.fa-paw:before { + content: ""; +} + +.fa-paypal:before { + content: ""; +} + +.fa-peace:before { + content: ""; +} + +.fa-pen:before { + content: ""; +} + +.fa-pen-alt:before { + content: ""; +} + +.fa-pen-fancy:before { + content: ""; +} + +.fa-pen-nib:before { + content: ""; +} + +.fa-pen-square:before { + content: ""; +} + +.fa-pencil-alt:before { + content: ""; +} + +.fa-pencil-ruler:before { + content: ""; +} + +.fa-penny-arcade:before { + content: ""; +} + +.fa-people-arrows:before { + content: ""; +} + +.fa-people-carry:before { + content: ""; +} + +.fa-pepper-hot:before { + content: ""; +} + +.fa-perbyte:before { + content: ""; +} + +.fa-percent:before { + content: ""; +} + +.fa-percentage:before { + content: ""; +} + +.fa-periscope:before { + content: ""; +} + +.fa-person-booth:before { + content: ""; +} + +.fa-phabricator:before { + content: ""; +} + +.fa-phoenix-framework:before { + content: ""; +} + +.fa-phoenix-squadron:before { + content: ""; +} + +.fa-phone:before { + content: ""; +} + +.fa-phone-alt:before { + content: ""; +} + +.fa-phone-slash:before { + content: ""; +} + +.fa-phone-square:before { + content: ""; +} + +.fa-phone-square-alt:before { + content: ""; +} + +.fa-phone-volume:before { + content: ""; +} + +.fa-photo-video:before { + content: ""; +} + +.fa-php:before { + content: ""; +} + +.fa-pied-piper:before { + content: ""; +} + +.fa-pied-piper-alt:before { + content: ""; +} + +.fa-pied-piper-hat:before { + content: ""; +} + +.fa-pied-piper-pp:before { + content: ""; +} + +.fa-pied-piper-square:before { + content: ""; +} + +.fa-piggy-bank:before { + content: ""; +} + +.fa-pills:before { + content: ""; +} + +.fa-pinterest:before { + content: ""; +} + +.fa-pinterest-p:before { + content: ""; +} + +.fa-pinterest-square:before { + content: ""; +} + +.fa-pizza-slice:before { + content: ""; +} + +.fa-place-of-worship:before { + content: ""; +} + +.fa-plane:before { + content: ""; +} + +.fa-plane-arrival:before { + content: ""; +} + +.fa-plane-departure:before { + content: ""; +} + +.fa-plane-slash:before { + content: ""; +} + +.fa-play:before { + content: ""; +} + +.fa-play-circle:before { + content: ""; +} + +.fa-playstation:before { + content: ""; +} + +.fa-plug:before { + content: ""; +} + +.fa-plus:before { + content: ""; +} + +.fa-plus-circle:before { + content: ""; +} + +.fa-plus-square:before { + content: ""; +} + +.fa-podcast:before { + content: ""; +} + +.fa-poll:before { + content: ""; +} + +.fa-poll-h:before { + content: ""; +} + +.fa-poo:before { + content: ""; +} + +.fa-poo-storm:before { + content: ""; +} + +.fa-poop:before { + content: ""; +} + +.fa-portrait:before { + content: ""; +} + +.fa-pound-sign:before { + content: ""; +} + +.fa-power-off:before { + content: ""; +} + +.fa-pray:before { + content: ""; +} + +.fa-praying-hands:before { + content: ""; +} + +.fa-prescription:before { + content: ""; +} + +.fa-prescription-bottle:before { + content: ""; +} + +.fa-prescription-bottle-alt:before { + content: ""; +} + +.fa-print:before { + content: ""; +} + +.fa-procedures:before { + content: ""; +} + +.fa-product-hunt:before { + content: ""; +} + +.fa-project-diagram:before { + content: ""; +} + +.fa-pump-medical:before { + content: ""; +} + +.fa-pump-soap:before { + content: ""; +} + +.fa-pushed:before { + content: ""; +} + +.fa-puzzle-piece:before { + content: ""; +} + +.fa-python:before { + content: ""; +} + +.fa-qq:before { + content: ""; +} + +.fa-qrcode:before { + content: ""; +} + +.fa-question:before { + content: ""; +} + +.fa-question-circle:before { + content: ""; +} + +.fa-quidditch:before { + content: ""; +} + +.fa-quinscape:before { + content: ""; +} + +.fa-quora:before { + content: ""; +} + +.fa-quote-left:before { + content: ""; +} + +.fa-quote-right:before { + content: ""; +} + +.fa-quran:before { + content: ""; +} + +.fa-r-project:before { + content: ""; +} + +.fa-radiation:before { + content: ""; +} + +.fa-radiation-alt:before { + content: ""; +} + +.fa-rainbow:before { + content: ""; +} + +.fa-random:before { + content: ""; +} + +.fa-raspberry-pi:before { + content: ""; +} + +.fa-ravelry:before { + content: ""; +} + +.fa-react:before { + content: ""; +} + +.fa-reacteurope:before { + content: ""; +} + +.fa-readme:before { + content: ""; +} + +.fa-rebel:before { + content: ""; +} + +.fa-receipt:before { + content: ""; +} + +.fa-record-vinyl:before { + content: ""; +} + +.fa-recycle:before { + content: ""; +} + +.fa-red-river:before { + content: ""; +} + +.fa-reddit:before { + content: ""; +} + +.fa-reddit-alien:before { + content: ""; +} + +.fa-reddit-square:before { + content: ""; +} + +.fa-redhat:before { + content: ""; +} + +.fa-redo:before { + content: ""; +} + +.fa-redo-alt:before { + content: ""; +} + +.fa-registered:before { + content: ""; +} + +.fa-remove-format:before { + content: ""; +} + +.fa-renren:before { + content: ""; +} + +.fa-reply:before { + content: ""; +} + +.fa-reply-all:before { + content: ""; +} + +.fa-replyd:before { + content: ""; +} + +.fa-republican:before { + content: ""; +} + +.fa-researchgate:before { + content: ""; +} + +.fa-resolving:before { + content: ""; +} + +.fa-restroom:before { + content: ""; +} + +.fa-retweet:before { + content: ""; +} + +.fa-rev:before { + content: ""; +} + +.fa-ribbon:before { + content: ""; +} + +.fa-ring:before { + content: ""; +} + +.fa-road:before { + content: ""; +} + +.fa-robot:before { + content: ""; +} + +.fa-rocket:before { + content: ""; +} + +.fa-rocketchat:before { + content: ""; +} + +.fa-rockrms:before { + content: ""; +} + +.fa-route:before { + content: ""; +} + +.fa-rss:before { + content: ""; +} + +.fa-rss-square:before { + content: ""; +} + +.fa-ruble-sign:before { + content: ""; +} + +.fa-ruler:before { + content: ""; +} + +.fa-ruler-combined:before { + content: ""; +} + +.fa-ruler-horizontal:before { + content: ""; +} + +.fa-ruler-vertical:before { + content: ""; +} + +.fa-running:before { + content: ""; +} + +.fa-rupee-sign:before { + content: ""; +} + +.fa-rust:before { + content: ""; +} + +.fa-sad-cry:before { + content: ""; +} + +.fa-sad-tear:before { + content: ""; +} + +.fa-safari:before { + content: ""; +} + +.fa-salesforce:before { + content: ""; +} + +.fa-sass:before { + content: ""; +} + +.fa-satellite:before { + content: ""; +} + +.fa-satellite-dish:before { + content: ""; +} + +.fa-save:before { + content: ""; +} + +.fa-schlix:before { + content: ""; +} + +.fa-school:before { + content: ""; +} + +.fa-screwdriver:before { + content: ""; +} + +.fa-scribd:before { + content: ""; +} + +.fa-scroll:before { + content: ""; +} + +.fa-sd-card:before { + content: ""; +} + +.fa-search:before { + content: ""; +} + +.fa-search-dollar:before { + content: ""; +} + +.fa-search-location:before { + content: ""; +} + +.fa-search-minus:before { + content: ""; +} + +.fa-search-plus:before { + content: ""; +} + +.fa-searchengin:before { + content: ""; +} + +.fa-seedling:before { + content: ""; +} + +.fa-sellcast:before { + content: ""; +} + +.fa-sellsy:before { + content: ""; +} + +.fa-server:before { + content: ""; +} + +.fa-servicestack:before { + content: ""; +} + +.fa-shapes:before { + content: ""; +} + +.fa-share:before { + content: ""; +} + +.fa-share-alt:before { + content: ""; +} + +.fa-share-alt-square:before { + content: ""; +} + +.fa-share-square:before { + content: ""; +} + +.fa-shekel-sign:before { + content: ""; +} + +.fa-shield-alt:before { + content: ""; +} + +.fa-shield-virus:before { + content: ""; +} + +.fa-ship:before { + content: ""; +} + +.fa-shipping-fast:before { + content: ""; +} + +.fa-shirtsinbulk:before { + content: ""; +} + +.fa-shoe-prints:before { + content: ""; +} + +.fa-shopify:before { + content: ""; +} + +.fa-shopping-bag:before { + content: ""; +} + +.fa-shopping-basket:before { + content: ""; +} + +.fa-shopping-cart:before { + content: ""; +} + +.fa-shopware:before { + content: ""; +} + +.fa-shower:before { + content: ""; +} + +.fa-shuttle-van:before { + content: ""; +} + +.fa-sign:before { + content: ""; +} + +.fa-sign-in-alt:before { + content: ""; +} + +.fa-sign-language:before { + content: ""; +} + +.fa-sign-out-alt:before { + content: ""; +} + +.fa-signal:before { + content: ""; +} + +.fa-signature:before { + content: ""; +} + +.fa-sim-card:before { + content: ""; +} + +.fa-simplybuilt:before { + content: ""; +} + +.fa-sink:before { + content: ""; +} + +.fa-sistrix:before { + content: ""; +} + +.fa-sitemap:before { + content: ""; +} + +.fa-sith:before { + content: ""; +} + +.fa-skating:before { + content: ""; +} + +.fa-sketch:before { + content: ""; +} + +.fa-skiing:before { + content: ""; +} + +.fa-skiing-nordic:before { + content: ""; +} + +.fa-skull:before { + content: ""; +} + +.fa-skull-crossbones:before { + content: ""; +} + +.fa-skyatlas:before { + content: ""; +} + +.fa-skype:before { + content: ""; +} + +.fa-slack:before { + content: ""; +} + +.fa-slack-hash:before { + content: ""; +} + +.fa-slash:before { + content: ""; +} + +.fa-sleigh:before { + content: ""; +} + +.fa-sliders-h:before { + content: ""; +} + +.fa-slideshare:before { + content: ""; +} + +.fa-smile:before { + content: ""; +} + +.fa-smile-beam:before { + content: ""; +} + +.fa-smile-wink:before { + content: ""; +} + +.fa-smog:before { + content: ""; +} + +.fa-smoking:before { + content: ""; +} + +.fa-smoking-ban:before { + content: ""; +} + +.fa-sms:before { + content: ""; +} + +.fa-snapchat:before { + content: ""; +} + +.fa-snapchat-ghost:before { + content: ""; +} + +.fa-snapchat-square:before { + content: ""; +} + +.fa-snowboarding:before { + content: ""; +} + +.fa-snowflake:before { + content: ""; +} + +.fa-snowman:before { + content: ""; +} + +.fa-snowplow:before { + content: ""; +} + +.fa-soap:before { + content: ""; +} + +.fa-socks:before { + content: ""; +} + +.fa-solar-panel:before { + content: ""; +} + +.fa-sort:before { + content: ""; +} + +.fa-sort-alpha-down:before { + content: ""; +} + +.fa-sort-alpha-down-alt:before { + content: ""; +} + +.fa-sort-alpha-up:before { + content: ""; +} + +.fa-sort-alpha-up-alt:before { + content: ""; +} + +.fa-sort-amount-down:before { + content: ""; +} + +.fa-sort-amount-down-alt:before { + content: ""; +} + +.fa-sort-amount-up:before { + content: ""; +} + +.fa-sort-amount-up-alt:before { + content: ""; +} + +.fa-sort-down:before { + content: ""; +} + +.fa-sort-numeric-down:before { + content: ""; +} + +.fa-sort-numeric-down-alt:before { + content: ""; +} + +.fa-sort-numeric-up:before { + content: ""; +} + +.fa-sort-numeric-up-alt:before { + content: ""; +} + +.fa-sort-up:before { + content: ""; +} + +.fa-soundcloud:before { + content: ""; +} + +.fa-sourcetree:before { + content: ""; +} + +.fa-spa:before { + content: ""; +} + +.fa-space-shuttle:before { + content: ""; +} + +.fa-speakap:before { + content: ""; +} + +.fa-speaker-deck:before { + content: ""; +} + +.fa-spell-check:before { + content: ""; +} + +.fa-spider:before { + content: ""; +} + +.fa-spinner:before { + content: ""; +} + +.fa-splotch:before { + content: ""; +} + +.fa-spotify:before { + content: ""; +} + +.fa-spray-can:before { + content: ""; +} + +.fa-square:before { + content: ""; +} + +.fa-square-full:before { + content: ""; +} + +.fa-square-root-alt:before { + content: ""; +} + +.fa-squarespace:before { + content: ""; +} + +.fa-stack-exchange:before { + content: ""; +} + +.fa-stack-overflow:before { + content: ""; +} + +.fa-stackpath:before { + content: ""; +} + +.fa-stamp:before { + content: ""; +} + +.fa-star:before { + content: ""; +} + +.fa-star-and-crescent:before { + content: ""; +} + +.fa-star-half:before { + content: ""; +} + +.fa-star-half-alt:before { + content: ""; +} + +.fa-star-of-david:before { + content: ""; +} + +.fa-star-of-life:before { + content: ""; +} + +.fa-staylinked:before { + content: ""; +} + +.fa-steam:before { + content: ""; +} + +.fa-steam-square:before { + content: ""; +} + +.fa-steam-symbol:before { + content: ""; +} + +.fa-step-backward:before { + content: ""; +} + +.fa-step-forward:before { + content: ""; +} + +.fa-stethoscope:before { + content: ""; +} + +.fa-sticker-mule:before { + content: ""; +} + +.fa-sticky-note:before { + content: ""; +} + +.fa-stop:before { + content: ""; +} + +.fa-stop-circle:before { + content: ""; +} + +.fa-stopwatch:before { + content: ""; +} + +.fa-stopwatch-20:before { + content: ""; +} + +.fa-store:before { + content: ""; +} + +.fa-store-alt:before { + content: ""; +} + +.fa-store-alt-slash:before { + content: ""; +} + +.fa-store-slash:before { + content: ""; +} + +.fa-strava:before { + content: ""; +} + +.fa-stream:before { + content: ""; +} + +.fa-street-view:before { + content: ""; +} + +.fa-strikethrough:before { + content: ""; +} + +.fa-stripe:before { + content: ""; +} + +.fa-stripe-s:before { + content: ""; +} + +.fa-stroopwafel:before { + content: ""; +} + +.fa-studiovinari:before { + content: ""; +} + +.fa-stumbleupon:before { + content: ""; +} + +.fa-stumbleupon-circle:before { + content: ""; +} + +.fa-subscript:before { + content: ""; +} + +.fa-subway:before { + content: ""; +} + +.fa-suitcase:before { + content: ""; +} + +.fa-suitcase-rolling:before { + content: ""; +} + +.fa-sun:before { + content: ""; +} + +.fa-superpowers:before { + content: ""; +} + +.fa-superscript:before { + content: ""; +} + +.fa-supple:before { + content: ""; +} + +.fa-surprise:before { + content: ""; +} + +.fa-suse:before { + content: ""; +} + +.fa-swatchbook:before { + content: ""; +} + +.fa-swift:before { + content: ""; +} + +.fa-swimmer:before { + content: ""; +} + +.fa-swimming-pool:before { + content: ""; +} + +.fa-symfony:before { + content: ""; +} + +.fa-synagogue:before { + content: ""; +} + +.fa-sync:before { + content: ""; +} + +.fa-sync-alt:before { + content: ""; +} + +.fa-syringe:before { + content: ""; +} + +.fa-table:before { + content: ""; +} + +.fa-table-tennis:before { + content: ""; +} + +.fa-tablet:before { + content: ""; +} + +.fa-tablet-alt:before { + content: ""; +} + +.fa-tablets:before { + content: ""; +} + +.fa-tachometer-alt:before { + content: ""; +} + +.fa-tag:before { + content: ""; +} + +.fa-tags:before { + content: ""; +} + +.fa-tape:before { + content: ""; +} + +.fa-tasks:before { + content: ""; +} + +.fa-taxi:before { + content: ""; +} + +.fa-teamspeak:before { + content: ""; +} + +.fa-teeth:before { + content: ""; +} + +.fa-teeth-open:before { + content: ""; +} + +.fa-telegram:before { + content: ""; +} + +.fa-telegram-plane:before { + content: ""; +} + +.fa-temperature-high:before { + content: ""; +} + +.fa-temperature-low:before { + content: ""; +} + +.fa-tencent-weibo:before { + content: ""; +} + +.fa-tenge:before { + content: ""; +} + +.fa-terminal:before { + content: ""; +} + +.fa-text-height:before { + content: ""; +} + +.fa-text-width:before { + content: ""; +} + +.fa-th:before { + content: ""; +} + +.fa-th-large:before { + content: ""; +} + +.fa-th-list:before { + content: ""; +} + +.fa-the-red-yeti:before { + content: ""; +} + +.fa-theater-masks:before { + content: ""; +} + +.fa-themeco:before { + content: ""; +} + +.fa-themeisle:before { + content: ""; +} + +.fa-thermometer:before { + content: ""; +} + +.fa-thermometer-empty:before { + content: ""; +} + +.fa-thermometer-full:before { + content: ""; +} + +.fa-thermometer-half:before { + content: ""; +} + +.fa-thermometer-quarter:before { + content: ""; +} + +.fa-thermometer-three-quarters:before { + content: ""; +} + +.fa-think-peaks:before { + content: ""; +} + +.fa-thumbs-down:before { + content: ""; +} + +.fa-thumbs-up:before { + content: ""; +} + +.fa-thumbtack:before { + content: ""; +} + +.fa-ticket-alt:before { + content: ""; +} + +.fa-tiktok:before { + content: ""; +} + +.fa-times:before { + content: ""; +} + +.fa-times-circle:before { + content: ""; +} + +.fa-tint:before { + content: ""; +} + +.fa-tint-slash:before { + content: ""; +} + +.fa-tired:before { + content: ""; +} + +.fa-toggle-off:before { + content: ""; +} + +.fa-toggle-on:before { + content: ""; +} + +.fa-toilet:before { + content: ""; +} + +.fa-toilet-paper:before { + content: ""; +} + +.fa-toilet-paper-slash:before { + content: ""; +} + +.fa-toolbox:before { + content: ""; +} + +.fa-tools:before { + content: ""; +} + +.fa-tooth:before { + content: ""; +} + +.fa-torah:before { + content: ""; +} + +.fa-torii-gate:before { + content: ""; +} + +.fa-tractor:before { + content: ""; +} + +.fa-trade-federation:before { + content: ""; +} + +.fa-trademark:before { + content: ""; +} + +.fa-traffic-light:before { + content: ""; +} + +.fa-trailer:before { + content: ""; +} + +.fa-train:before { + content: ""; +} + +.fa-tram:before { + content: ""; +} + +.fa-transgender:before { + content: ""; +} + +.fa-transgender-alt:before { + content: ""; +} + +.fa-trash:before { + content: ""; +} + +.fa-trash-alt:before { + content: ""; +} + +.fa-trash-restore:before { + content: ""; +} + +.fa-trash-restore-alt:before { + content: ""; +} + +.fa-tree:before { + content: ""; +} + +.fa-trello:before { + content: ""; +} + +.fa-tripadvisor:before { + content: ""; +} + +.fa-trophy:before { + content: ""; +} + +.fa-truck:before { + content: ""; +} + +.fa-truck-loading:before { + content: ""; +} + +.fa-truck-monster:before { + content: ""; +} + +.fa-truck-moving:before { + content: ""; +} + +.fa-truck-pickup:before { + content: ""; +} + +.fa-tshirt:before { + content: ""; +} + +.fa-tty:before { + content: ""; +} + +.fa-tumblr:before { + content: ""; +} + +.fa-tumblr-square:before { + content: ""; +} + +.fa-tv:before { + content: ""; +} + +.fa-twitch:before { + content: ""; +} + +.fa-twitter:before { + content: ""; +} + +.fa-twitter-square:before { + content: ""; +} + +.fa-typo3:before { + content: ""; +} + +.fa-uber:before { + content: ""; +} + +.fa-ubuntu:before { + content: ""; +} + +.fa-uikit:before { + content: ""; +} + +.fa-umbraco:before { + content: ""; +} + +.fa-umbrella:before { + content: ""; +} + +.fa-umbrella-beach:before { + content: ""; +} + +.fa-uncharted:before { + content: ""; +} + +.fa-underline:before { + content: ""; +} + +.fa-undo:before { + content: ""; +} + +.fa-undo-alt:before { + content: ""; +} + +.fa-uniregistry:before { + content: ""; +} + +.fa-unity:before { + content: ""; +} + +.fa-universal-access:before { + content: ""; +} + +.fa-university:before { + content: ""; +} + +.fa-unlink:before { + content: ""; +} + +.fa-unlock:before { + content: ""; +} + +.fa-unlock-alt:before { + content: ""; +} + +.fa-unsplash:before { + content: ""; +} + +.fa-untappd:before { + content: ""; +} + +.fa-upload:before { + content: ""; +} + +.fa-ups:before { + content: ""; +} + +.fa-usb:before { + content: ""; +} + +.fa-user:before { + content: ""; +} + +.fa-user-alt:before { + content: ""; +} + +.fa-user-alt-slash:before { + content: ""; +} + +.fa-user-astronaut:before { + content: ""; +} + +.fa-user-check:before { + content: ""; +} + +.fa-user-circle:before { + content: ""; +} + +.fa-user-clock:before { + content: ""; +} + +.fa-user-cog:before { + content: ""; +} + +.fa-user-edit:before { + content: ""; +} + +.fa-user-friends:before { + content: ""; +} + +.fa-user-graduate:before { + content: ""; +} + +.fa-user-injured:before { + content: ""; +} + +.fa-user-lock:before { + content: ""; +} + +.fa-user-md:before { + content: ""; +} + +.fa-user-minus:before { + content: ""; +} + +.fa-user-ninja:before { + content: ""; +} + +.fa-user-nurse:before { + content: ""; +} + +.fa-user-plus:before { + content: ""; +} + +.fa-user-secret:before { + content: ""; +} + +.fa-user-shield:before { + content: ""; +} + +.fa-user-slash:before { + content: ""; +} + +.fa-user-tag:before { + content: ""; +} + +.fa-user-tie:before { + content: ""; +} + +.fa-user-times:before { + content: ""; +} + +.fa-users:before { + content: ""; +} + +.fa-users-cog:before { + content: ""; +} + +.fa-users-slash:before { + content: ""; +} + +.fa-usps:before { + content: ""; +} + +.fa-ussunnah:before { + content: ""; +} + +.fa-utensil-spoon:before { + content: ""; +} + +.fa-utensils:before { + content: ""; +} + +.fa-vaadin:before { + content: ""; +} + +.fa-vector-square:before { + content: ""; +} + +.fa-venus:before { + content: ""; +} + +.fa-venus-double:before { + content: ""; +} + +.fa-venus-mars:before { + content: ""; +} + +.fa-vest:before { + content: ""; +} + +.fa-vest-patches:before { + content: ""; +} + +.fa-viacoin:before { + content: ""; +} + +.fa-viadeo:before { + content: ""; +} + +.fa-viadeo-square:before { + content: ""; +} + +.fa-vial:before { + content: ""; +} + +.fa-vials:before { + content: ""; +} + +.fa-viber:before { + content: ""; +} + +.fa-video:before { + content: ""; +} + +.fa-video-slash:before { + content: ""; +} + +.fa-vihara:before { + content: ""; +} + +.fa-vimeo:before { + content: ""; +} + +.fa-vimeo-square:before { + content: ""; +} + +.fa-vimeo-v:before { + content: ""; +} + +.fa-vine:before { + content: ""; +} + +.fa-virus:before { + content: ""; +} + +.fa-virus-slash:before { + content: ""; +} + +.fa-viruses:before { + content: ""; +} + +.fa-vk:before { + content: ""; +} + +.fa-vnv:before { + content: ""; +} + +.fa-voicemail:before { + content: ""; +} + +.fa-volleyball-ball:before { + content: ""; +} + +.fa-volume-down:before { + content: ""; +} + +.fa-volume-mute:before { + content: ""; +} + +.fa-volume-off:before { + content: ""; +} + +.fa-volume-up:before { + content: ""; +} + +.fa-vote-yea:before { + content: ""; +} + +.fa-vr-cardboard:before { + content: ""; +} + +.fa-vuejs:before { + content: ""; +} + +.fa-walking:before { + content: ""; +} + +.fa-wallet:before { + content: ""; +} + +.fa-warehouse:before { + content: ""; +} + +.fa-watchman-monitoring:before { + content: ""; +} + +.fa-water:before { + content: ""; +} + +.fa-wave-square:before { + content: ""; +} + +.fa-waze:before { + content: ""; +} + +.fa-weebly:before { + content: ""; +} + +.fa-weibo:before { + content: ""; +} + +.fa-weight:before { + content: ""; +} + +.fa-weight-hanging:before { + content: ""; +} + +.fa-weixin:before { + content: ""; +} + +.fa-whatsapp:before { + content: ""; +} + +.fa-whatsapp-square:before { + content: ""; +} + +.fa-wheelchair:before { + content: ""; +} + +.fa-whmcs:before { + content: ""; +} + +.fa-wifi:before { + content: ""; +} + +.fa-wikipedia-w:before { + content: ""; +} + +.fa-wind:before { + content: ""; +} + +.fa-window-close:before { + content: ""; +} + +.fa-window-maximize:before { + content: ""; +} + +.fa-window-minimize:before { + content: ""; +} + +.fa-window-restore:before { + content: ""; +} + +.fa-windows:before { + content: ""; +} + +.fa-wine-bottle:before { + content: ""; +} + +.fa-wine-glass:before { + content: ""; +} + +.fa-wine-glass-alt:before { + content: ""; +} + +.fa-wix:before { + content: ""; +} + +.fa-wizards-of-the-coast:before { + content: ""; +} + +.fa-wodu:before { + content: ""; +} + +.fa-wolf-pack-battalion:before { + content: ""; +} + +.fa-won-sign:before { + content: ""; +} + +.fa-wordpress:before { + content: ""; +} + +.fa-wordpress-simple:before { + content: ""; +} + +.fa-wpbeginner:before { + content: ""; +} + +.fa-wpexplorer:before { + content: ""; +} + +.fa-wpforms:before { + content: ""; +} + +.fa-wpressr:before { + content: ""; +} + +.fa-wrench:before { + content: ""; +} + +.fa-x-ray:before { + content: ""; +} + +.fa-xbox:before { + content: ""; +} + +.fa-xing:before { + content: ""; +} + +.fa-xing-square:before { + content: ""; +} + +.fa-y-combinator:before { + content: ""; +} + +.fa-yahoo:before { + content: ""; +} + +.fa-yammer:before { + content: ""; +} + +.fa-yandex:before { + content: ""; +} + +.fa-yandex-international:before { + content: ""; +} + +.fa-yarn:before { + content: ""; +} + +.fa-yelp:before { + content: ""; +} + +.fa-yen-sign:before { + content: ""; +} + +.fa-yin-yang:before { + content: ""; +} + +.fa-yoast:before { + content: ""; +} + +.fa-youtube:before { + content: ""; +} + +.fa-youtube-square:before { + content: ""; +} + +.fa-zhihu:before { + content: ""; +} + +.sr-only { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +.sr-only-focusable:active, .sr-only-focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; +} + +/*! + * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +@font-face { + font-family: "Font Awesome 5 Free"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.eot?4079ae2d2a15d0689568f3a5459241c7); + src: url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.eot?4079ae2d2a15d0689568f3a5459241c7) format("embedded-opentype"), url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.woff2?68c5af1f48e2bfca1e57ae1c556a5c72) format("woff2"), url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.woff?3672264812746c3c7225909742da535c) format("woff"), url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.ttf?1017bce89c72f95bcf8e2bf4774efdbf) format("truetype"), url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.svg?19e27d348fefc21941e0310a0ec6339b) format("svg"); +} +.far { + font-family: "Font Awesome 5 Free"; + font-weight: 400; +} + +/*! + * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +@font-face { + font-family: "Font Awesome 5 Free"; + font-style: normal; + font-weight: 900; + font-display: block; + src: url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.eot?efbd5d20e407bbf85f2b3087ee67bfa1); + src: url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.eot?efbd5d20e407bbf85f2b3087ee67bfa1) format("embedded-opentype"), url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.woff2?ada6e6df937f7e5e8b790dfea07109b7) format("woff2"), url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.woff?c6ec080084769a6d8a34ab35b77999cd) format("woff"), url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.ttf?07c3313b24f7b1ca85ee99b4fa7db55e) format("truetype"), url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.svg?13de59f1a36b6cb4bca0050160ff0e41) format("svg"); +} +.fa, +.fas { + font-family: "Font Awesome 5 Free"; + font-weight: 900; +} + +/*! + * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +@font-face { + font-family: "Font Awesome 5 Brands"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.eot?89a52ae1d02b86d6143987c865471c24); + src: url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.eot?89a52ae1d02b86d6143987c865471c24) format("embedded-opentype"), url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.woff2?c1210e5ebe4344da508396540be7f52c) format("woff2"), url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.woff?329a95a9172fdb2cccb4f9347ed55233) format("woff"), url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.ttf?9e138496e8f1719c6ebf0abe50563635) format("truetype"), url(/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.svg?216edb96b562c79adc09e2d3c63db7c0) format("svg"); +} +.fab { + font-family: "Font Awesome 5 Brands"; + font-weight: 400; +} + +.-mb-2 { + margin-bottom: -0.5rem !important; +} + +.-mx-2, .-m-2 { + margin-left: -0.5rem !important; + margin-right: -0.5rem !important; +} + +.-my-2, .-m-2 { + margin-top: -0.5rem !important; + margin-bottom: -0.5rem !important; +} + +body { + font: normal 8pt/normal Verdana, sans-serif; + margin: 0; + text-transform: none; + text-decoration: none; + background: #F8FCFF url(/images/bg_gradient.jpg) repeat-x; +} + +a { + text-decoration: none; +} + +a img { + border: none; +} + +a:link, +a:visited, +a:active { + color: #00F; +} + +a:hover { + text-decoration: underline; +} + +abbr, +acronym { + cursor: help; + border-bottom: 1px dotted #000; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + padding: 0; + font-size: 100%; + font-weight: inherit; + display: inline-block; + *display: inline; +} + +pre { + white-space: pre-wrap; + white-space: -moz-pre-wrap !important; + white-space: -pre-wrap; + white-space: -o-pre-wrap; + word-wrap: break-word; +} + +input.Text { + border-color: #777; + border-style: dashed; +} + +.AdminPanel { + border-color: Orange; + border-style: dotted; + padding: 10px; +} + +.ImageButton { + cursor: pointer; + padding: 0; + border: 0; + text-decoration: none; + margin: 0; + display: inline-block; +} + +.Button { + cursor: pointer; + background-color: #fff; + border: solid 1px #333; + color: #333; + font-family: Verdana, Sans-Serif; + font-size: 0.9em; + padding: 3px 10px 3px 10px; + text-decoration: none; +} + +.Button:link, +.Button:visited { + border: solid 1px #777; + color: #777; +} + +.Button:hover, +.Button:active { + background-color: #6e99c9; + border: solid 1px #000; + color: #fff; +} + +.Bullet { + float: left; + margin-right: 10px; + margin-bottom: 4px; +} + +.Ads_RightSidebar { + border: solid 1px #000; + float: right; + text-align: right; + width: 160px; +} + +.Legalese { + font-size: 7pt; +} + +#Container { + margin: 0 auto; + padding: 0 10px; + border-left: 5px solid #DDD; + border-right: 5px solid #DDD; + width: 900px; + background: #e5f1fd; +} + +#Header { + margin: 0 auto; + color: White; + font: normal 12px/normal Verdana, sans-serif; + font-weight: bold; + width: 900px; + text-align: center; +} + +#Header a, +#Header a:visited, +#Header a:active { + text-decoration: none; +} + +#Header a:hover { + text-decoration: underline; +} + +#Banner { + background-image: url(/images/WoodBanner.png); + background-repeat: no-repeat; + height: 72px; + text-align: center; +} + +#Banner #Options { + float: left; + height: 72px; + position: relative; + overflow: hidden; + width: 200px; +} + +#Banner #Authentication { + top: 0; + left: 0; + padding: 4px; + position: absolute; + background: #6E99C9; +} + +#Banner #Options #Settings { + bottom: 0; + left: 0; + padding: 4px; + position: absolute; +} + +#Banner #Logo { + float: left; + margin: 7px 0; + text-align: center; + width: 293px; + height: 58px; +} + +#Banner #Alerts { + float: right; + border: 1px solid #6E99C9; + background: #FFF; + width: 203px; +} + +#Header .Navigation { + clear: both; + background-color: #6e99c9; + color: #fff; + font-family: Arial, Helvetica, sans-serif; + font-size: 12pt; + font-weight: normal; + line-height: 2em; + text-decoration: none; +} + +#AdvertisingLeaderboard { + margin: 0 auto; + margin-bottom: 5px; + text-align: center; + width: 898px; +} + +#AdvertisingSkyscraper { + border: solid 1px #000; + float: right; + text-align: right; + width: 120px; +} + +#RobloxLargeRectangleAd { + padding: 10px 0 10px 0; +} + +#MasterContainer { + background: transparent url(/images/bg_clouds.jpg) no-repeat scroll center top; + width: 100%; + overflow: auto; +} + +#Body { + width: 900px; +} + +#Footer { + font: normal 8px/normal Verdana, sans-serif; + padding: 3em 20px; + width: 860px; + text-align: center; + font-size: 13px; + margin: 0; +} + +#Footer .SEOGenreLinks { + padding: 1em 0 2em 0; + font-size: 11px; +} + +#Footer .Legalese { + color: #555; + font-size: 10px; + margin-bottom: 1em; +} + +.AdmiPanel { + border: solid 1px #000; + bottom: 20px; + height: 200px; + overflow: hidden; + right: 10px; + padding-top: 15px; + position: fixed; + width: 200px; +} + +.AdmiPanel h4 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + margin: 0; + text-align: center; +} + +.AdmiPanelExpandCollapse { + color: green; + cursor: pointer; + font-weight: bolder; + position: absolute; + right: 2px; + top: 2px; +} + +.Panel { + border: solid 1px #000; +} + +.Panel h4 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + margin: 0; + text-align: center; +} + +.MultilineTextBox { + border: dashed 2px Gray; + font-family: Verdana, Sans-Serif; + font-size: 1.2em; + line-height: 1.5em; + padding: 5px 5px; +} + +.TextBox { + border: 1px solid #ccc; + font-family: Verdana, Sans-Serif; + font-size: 1.2em; + padding: 5px; +} + +.Label { + font-weight: bold; +} + +.BigButton { + background-color: #F5CD2F; + color: #000; + height: 2.5em; + font-family: Verdana, Helvetica, Sans-Serif; + font-size: 20px; + font-weight: bold; +} + +.ErrorReporting, +.ErrorReportingThanks { + width: 500px; + margin: 16px auto 16px auto; + padding: 10px; +} + +.YesNoButtons { + text-align: right; +} + +.YesButton, +.NoButton { + background-color: #F5CD2F; + color: #000; + margin-left: 10px; +} + +.popupControl { + background-color: #fff; + border: 1px outset #fff; + position: absolute; + visibility: hidden; +} + +.ColorPickerItem { + border-color: #fff; + border-style: solid; + border-width: 2px; +} + +.ColorPickerItem:hover { + border-color: Blue; + border-style: solid; + border-width: 2px; +} + +.modalBackground { + background-color: Gray; + filter: alpha(opacity=30); + opacity: 0.3; +} + +.modalPopup { + background-color: #ffd; + border-width: 3px; + border-style: solid; + border-color: Gray; + padding: 3px; +} + +.newModalPopup { + padding: 3px; +} + +.GuestModePromptText { + font-size: 14px; + color: #333; + margin-left: 30px; +} + +.GuestModePromptText li { + font-weight: bolder; +} + +.PopupMenu { + background-color: #fff; + border: solid 1px #666; + padding: 10px; + z-index: 1; +} + +.PopupMenu .Button { + line-height: 2.5em; +} + +.PopupMenu .Button:hover { + background-color: #6e99c9; + color: #fff; +} + +.Attention { + color: Red; +} + +.OKCancelButton { + width: 80px; +} + +.MenuItem { + color: White; + font-size: 18px; + line-height: 2em; +} + +a.MenuItem:link, +a.MenuItem:visited, +a.MenuItem:active { + color: White; + text-decoration: none; +} + +a.MenuItem:hover { + text-decoration: underline; +} + +.Toolbox { + background-color: ButtonFace; + padding: 2px; +} + +.ToolboxItem { + border-color: Window; + border-style: solid; + border-width: 2px; + width: 52px; + height: 52px; +} + +.Grid { + background-color: White; + border-color: #CCC; + border-width: 1px; + border-style: solid; +} + +.GridHeader { + color: White; + background-color: #6E99C9; +} + +.GridItem { + color: #006; +} + +.GridItemAlt { + color: #006; + background: #EEE; +} + +.GridItem:hover { + background-color: #DDD; +} + +.GridItemAlt:hover { + background-color: #DDD; +} + +.GridFooter { + color: White; + background-color: #6E99C9; +} + +.GridPager { + color: White; + background-color: #6E99C9; + text-align: center; + font-weight: bold; +} + +.Title { + font-size: 18px; +} + +a.Title:link, +a.Title:visited, +a.Title:active { + text-decoration: none; +} + +a.Title:hover { + text-decoration: underline; +} + +.Header { + font-size: 14px; +} + +.Banner { + padding: 8px; +} + +.BannerText { + font-weight: bold; + color: white; +} + +a.BannerText:link, +a.BannerText:visited, +a.BannerText:active { + text-decoration: none; + color: white; +} + +a.BannerText:hover { + text-decoration: underline; + color: white; +} + +.PageSelector { + font-family: Verdana, Sans-Serif; + margin: 0 0 0 10px; +} + +.PageSelector label { + font-weight: bold; +} + +.DisplayFilters { + margin-right: 3px; + min-width: 0; + position: relative; +} + +.SearchBar { + background-color: #eee; + border: solid 1px #bbb; + height: 30px; + margin: -5px 0 5px 0; + padding: 0; + text-align: center; +} + +.SearchBar .SearchBox, +.SearchBar .SearchButton { + height: 30px; + margin: 0; + padding: 0; +} + +.SearchBar .TextBox { + border: solid 1px #000; + height: 19px; + margin: 2px 0 0 0; + padding: 2px 3px 0 3px; + width: 250px; +} + +.SearchLinks { + display: inline; + font-family: Verdana, Sans-Serif; + z-index: 9; +} + +.SearchLinks a span { + display: none; +} + +.SearchLinks a:hover { + border: none; + text-decoration: none; +} + +.SearchLinks a:hover span { + background-color: #6e99c9; + border-color: Gray; + border-style: ridge; + border-width: 1px; + color: white; + display: block; + font: 11px Verdana, sans-serif; + left: 15%; + line-height: 1.4em; + margin: 5px; + padding: 5px; + position: absolute; + text-align: center; + text-decoration: none; + top: 20px; + width: 60%; + z-index: 10; +} + +.SearchError { + clear: both; + margin: 2px; + float: none; + padding: 2px; + text-align: center; + color: Red; +} + +.SystemAlert { + background-color: #FFF; + text-align: center; + color: #FFF; + border: 2px solid #000; + padding: 1px; +} + +.SystemAlertText { + font-size: 16px; + font-weight: bold; + background-color: #F00; + padding: 2px; +} + +.SystemAlert a { + color: White; +} + +.Exclamation { + background: url(/images/Icons/exclamation.png) no-repeat; + height: 16px; + width: 16px; + float: left; +} + +.EmailTemplateTable { + border-collapse: collapse; +} + +.EmailTemplateH1 { + font-size: 18px; + color: #6E99C9; +} + +.EmailTemplateLogoRow { + padding: 3px; + margin-bottom: 5px; +} + +.EmailTemplateRow { + padding: 3px; + margin-bottom: 3px; + font-size: 14px; + font-family: Verdana, Helvetica, Sans-Serif; +} + +.EmailTemplateRow input { + font-size: 14px; + padding: 2px; + border: 1px solid #CCC; +} + +.EmailTemplateRow input:hover { + font-size: 14px; + padding: 2px; + border: 1px solid #CCC; + background: #6E99C9; +} + +.subMenu { + background: #A3514F; + background-repeat: repeat-x; + color: White; + font-family: Arial, Helvetica, Sans-Serif; + font-size: 14px; + height: 26px; + position: relative; + border-left: solid 3px #6E99C9; + border-right: solid 3px #6E99C9; + border-bottom: solid 3px #6E99C9; + z-index: 5; +} + +.subMenu ul { + padding: 0; + margin: 0; + list-style-type: none; +} + +.subMenu li { + float: left; + position: relative; +} + +.subMenu a, +.subMenu a:visited { + display: block; + padding: 5px; + border-right: 1px solid #FFF; + font-size: 14px; + color: #FFF; +} + +.subMenu .subMenuItemselected { + display: block; + padding: 5px; + border-right: 1px solid #FFF; + font-size: 14px; + color: #FFF; + font-weight: bold; + text-decoration: none; +} + +.subMenu ul ul a.subMenudrop, +.menu ul ul a.subMenudrop:visited { + font-weight: bold; + text-decoration: underline; +} + +.subMenu ul ul ul a, +.subMenu ul ul ul a:visited { + background: #A3514F; +} + +.subMenu ul ul ul a:hover { + text-decoration: underline; +} + +.subMenu ul ul { + visibility: hidden; + position: absolute; + height: 0; + left: 0; +} + +.subMenu ul ul ul { + left: 141px; + top: 0; + width: 149px; +} + +.subMenu ul ul ul.left { + left: -149px; +} + +.subMenu ul ul a, +.subMenu ul ul a:visited { + background: #A3514F; + color: #FFF; + height: auto; + padding: 4px 6px; + line-height: 1em; + width: 148px; + margin-left: -1px; + border-left: 1px solid #FFF; + border-right: none; +} + +.subMenu a:hover, +.subMenu ul ul a:hover { + text-decoration: underline; + background: #573333; +} + +.subMenu :hover > a, +.subMenu ul ul :hover > a { + text-decoration: underline; +} + +.subMenu ul li:hover ul, +.subMenu ul a:hover ul { + visibility: visible; +} + +.subMenu ul :hover ul ul { + visibility: hidden; +} + +.subMenu ul :hover ul :hover ul { + visibility: visible; +} + +.subMenu table { + position: absolute; + top: 0; + margin-top: 15px; + left: 0; + border-collapse: collapse; + background: #A3514F; + display: none; +} + +.subMenu table a, +.subMenu table a:visited { + border: none; + width: 148px; + padding-top: 8px; +} + +#LeftGutterAdContainer { + position: fixed; + top: 0; + left: 50%; + margin-left: -850px; +} + +#RightGutterAdContainer { + position: fixed; + top: 0; + left: 50%; + margin-left: 450px; +} + +.partnerLogo { + margin-right: 30px; + vertical-align: middle; +} + +.errorMsg { + font-weight: bold; + text-align: center; + display: block; + font-size: 1.5em; + margin: 0.83em 0; + letter-spacing: 1px; +} + +.facepile { + min-height: 0; +} + +body { + margin: 0; + padding: 0; + background: url(/images/css/bkg.jpg) top center repeat-x #000444; + font-family: Arial, Helvetica, sans-serif; + color: black; + font-size: 12px; +} + +a { + text-decoration: none; + color: #00f; +} + +a:hover, +a:active { + text-decoration: underline; +} + +a.green { + color: #080; +} + +a.green:hover { + color: #0c0; +} + +a img { + border: none; +} + +#Header a:hover { + text-decoration: none; +} + +#MasterContainer { + background-image: none; +} + +#Container { + background: Transparent; + border: none; +} + +#HeaderContainer { + position: relative; + margin: 0; + padding: 0; + width: 900px; + height: 225px; + background: url(/images/css/head_03.png) repeat scroll 0 0 transparent; + background-position: 0 0; + background-repeat: no-repeat; + z-index: 6; +} + +#Banner { + height: 100px; + background: none; + position: relative; + bottom: 0; +} + +#Banner #Logo { + height: 70px; + left: 275px; + position: absolute; + top: 10px; + width: 350px; + margin: 0; + float: none; +} + +#Header .headLink { + position: absolute; + top: 4px; + left: 278px; + width: 348px; + height: 88px; +} + +#Banner #Authentication { + position: relative; + top: 0; + margin: 0; + height: 28px; + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + font-weight: normal; + color: Black; + float: left; + background: url(/images/css/head_bkg_t1.png) no-repeat left top; + padding: 0 0 0 2px; +} + +#Banner #Authentication #AuthenticationBannerSpan { + background: url(/images/css/head_bkg_t2.png) no-repeat scroll right top transparent; + display: block; + height: 28px; + padding: 6px 10px 0; +} + +#Banner #Authentication a { + height: 18px; + background: url(/images/css/btn_blue18h.png) repeat-x; + background-position: 0 0; + margin: 0 5px; + font-weight: bold; + font-size: 10px; + padding: 2px 5px; +} + +#Banner #Authentication a:hover { + background-position: 0 -18px; +} + +#Banner #Alerts { + background: Transparent; + border: none; + position: absolute; + width: 147px; + height: 81px; + bottom: 0; + right: 3px; + float: none; +} + +#Body { + margin: 0; + padding: 5px; + width: 890px; + background: url(/images/css/containerBkg_01.png); + _overflow: hidden; +} + +.favorited, +.notFavorited { + background: url(/images/css/favoriteStar_20h.png) no-repeat 0 -20px; + width: 21px; + height: 20px; + margin: 0; + display: inline-block; + position: relative; + top: 3px; + *display: inline; + *zoom: 1; +} + +.notFavorited { + background-position: 0 0; +} + +#Footer { + background: #e6e6e6; + text-align: center; + font-size: 13px; + color: #aaa; + margin: 0; + padding: 3em 20px; + width: 860px; +} + +#Footer .FooterNav { + color: #bbb; +} + +#Footer .SEOGenreLinks { + padding: 1em 0 2em 0; + font-size: 11px; +} + +#Footer .Legalese { + font-size: 10px; + margin-bottom: 1em; +} + +#Footer .Legalese p { + margin: 0; + padding: 0; +} + +.blueAndWhite { + border: 2px solid #6e99c9; + background-color: #fff; + color: #000; +} + +.blueAndWhite .titleBar { + background-color: #000; + color: #FFF; + font-weight: bold; + padding: 2px 2px 2px 2px; + margin-bottom: 5px; + font-size: 13px; +} + +#ResetPassword, +#ResetPassword input { + font-size: 16px; +} + +#ResetPassword #ResetPasswordTable td { + padding: 5px; +} + +.ParentsLearningContent { + font-size: 14px; +} + +.ParentsLearningContent .ParentsLearningHeader { + text-decoration: none; +} + +.StandardBoxLight { + float: inherit; + border: 1px solid #3B526B; + padding: 10px 10px 10px 10px; + margin-bottom: 10px; + display: block; +} + +.StandardBoxLightHeader { + float: inherit; + background-color: #3B526B; + text-align: center; + color: #FFF; + text-align: left; + font-size: 16px; + font-weight: bold; + padding: 5px 10px 5px 20px; + display: block; +} + +.ParentsLearningContent .StandardBoxLightHeader { + margin: 10px 0; +} + +.LoginParentAccount { + text-align: left; +} + +.ParentsControlPanel, +.ParentsControlPanel input { + font-size: 14px; +} + +.ParentsControlPanelTable table { + border-collapse: collapse; + border-spacing: 0; +} + +.ParentsControlPanelTable table td, +.ParentsControlPanelTable table th { + border: 1px solid #EEE; + padding: 5px; +} + +.ParentsControlPanelTable table tr:first-child td, +.ParentsControlPanelTable table tr:first-child th { + border-top: 0; +} + +.ParentsControlPanelTable table tr:last-child td { + border-bottom: 0; +} + +.ParentsControlPanelTable table tr td:first-child, +.ParentsControlPanelTable table tr th:first-child { + border-left: 0; +} + +.ParentsControlPanelTable table tr td:last-child, +.ParentsControlPanelTable table tr th:last-child { + border-right: 0; +} + +.ContinueButtonFix { + text-align: center; +} + +.ParentCenterAlignedTable table { + margin: 0 auto; +} + +.JustWhiteBox { + float: inherit; + background-color: White; + margin-bottom: 10px; + display: block; +} + +.MediumButton { + background-color: #F5CD2F; + color: #000; + font-family: Verdana, Helvetica, Sans-Serif; + font-size: 15px; + font-weight: bold; + padding: 5px; + display: inline-block; + border: 1px solid #6E99C9; + text-align: center; + cursor: pointer; +} + +.MediumButton:hover { + background-color: #FF9D2F; +} + +.MediumButtonSignup { + background-color: #8CE16F; + color: #000; + height: 2.5em; + font-family: Verdana, Helvetica, Sans-Serif; + font-size: 15px; + font-weight: bold; +} + +.catalog_nav { + color: White; + font-family: Arial, Helvetica, Sans-Serif; + font-size: 14px; + position: relative; + z-index: 5; + float: right; +} + +.catalog_nav ul { + padding: 0; + margin: 0; + list-style-type: none; +} + +.catalog_nav li { + float: left; + position: relative; + text-align: center; +} + +.catalog_nav a, +.catalog_nav a:visited { + background: #b9cee5 url(/images/tabmiddle.png) repeat-x; + display: block; + padding: 5px; + margin-right: 4px; + font-size: 14px; + color: #FFF; + height: 18px; + cursor: pointer; +} + +.catalog_nav .catalog_navselected { + display: block; + background: #6E99C9 url(/images/tabmiddleselected.png) repeat-x; + padding: 5px 10px; + margin-right: 4px; + font-size: 14px; + color: #FFF; + font-weight: bold; + text-decoration: none; + height: 18px; +} + +.catalog_nav ul ul a.catalog_navdrop, +t.menu ul ul a.catalog_navdrop:visited { + font-weight: bold; + text-decoration: none; +} + +.catalog_nav ul ul ul a:hover { + text-decoration: underline; +} + +.catalog_nav ul ul { + visibility: hidden; + position: absolute; + height: 0; + left: 0; + z-index: 20; +} + +.catalog_nav ul ul ul { + left: 141px; + top: 0; + width: 89px; +} + +.catalog_nav ul ul ul.left { + left: -149px; +} + +.catalog_nav ul ul a, +.catalog_nav ul ul a:visited { + color: #FFF; + background: #6E99C9; + height: auto; + padding: 4px 6px; + line-height: 1em; + width: 78px; + margin-right: 4px; + z-index: 20; + height: 18px; +} + +.catalog_nav img { + border: 0; + margin-right: 3px; + vertical-align: middle; +} + +.catalog_nav a:hover { + text-decoration: none; + background: #6E99C9 url(/images/tabmiddleselected.png) repeat-x; +} + +.catalog_nav ul ul a:hover { + text-decoration: none; + background: #517194; +} + +.catalog_nav :hover > a, +.catalog_nav ul ul :hover > a { + text-decoration: none; +} + +.catalog_nav ul li:hover ul, +.catalog_nav ul a:hover ul { + visibility: visible; +} + +.catalog_nav ul :hover ul ul { + visibility: hidden; +} + +.catalog_nav ul :hover ul :hover ul { + visibility: visible; +} + +.catalog_nav table { + position: absolute; + top: 0; + margin-top: 15px; + left: 0; + border-collapse: collapse; + background: #6E99C9; + display: none; +} + +.catalog_nav table a, +.catalog_nav table a:visited { + border: none; + width: 78px; + padding-top: 8px; +} + +.Step1 { + float: left; + font-size: 16px; + font-weight: bold; + background: url(/images/step1.png) no-repeat 0; + line-height: 32px; + padding-left: 32px; +} + +.Step2 { + float: left; + font-size: 16px; + font-weight: bold; + background: url(/images/step2.png) no-repeat 0; + line-height: 32px; + padding-left: 32px; +} + +.Step3 { + float: left; + font-size: 16px; + font-weight: bold; + background: url(/images/step3.png) no-repeat 0; + line-height: 32px; + padding-left: 32px; +} + +.CatalogOptions { + float: left; + padding: 20px; + background: #8bc2ff url(/images/catalog_options_back.png) repeat-x; + border: 0; + margin-bottom: 0; + display: none; + width: 176px; + overflow: hidden; +} + +#ApplyFilters input { + font-size: 17px; + cursor: pointer; +} + +.CatalogOptionsSections { + float: left; + margin: 5px 20px 0 5px; +} + +.CatalogOptionsHelp { + margin-top: -5px; + float: left; +} + +.CatalogOptionsHelp ul { + list-style: none; +} + +.CatalogOptionsHelp ul li { + margin-top: 3px; +} + +.CatalogOptionsHelp ul li a { + background: url(/images/smallmetallicbutton.png) repeat-x; + border: 2px solid transparent; + padding: 3px; + font-size: 12px; + cursor: pointer; + text-decoration: none; + display: block; + width: 120px; + text-align: center; +} + +.CatalogOptionsHelp ul li a:hover { + border-color: #333; +} + +.bc_iconset, +#BuildersClubContainer div.icons { + background-image: url(/images/bc_page_icon_sprites.png); + background-repeat: no-repeat; + width: 32px; + display: inline-block; + text-align: center; +} + +#BuildersClubContainer div.maps_icon { + background-position: 0 1px; + height: 30px; +} + +#BuildersClubContainer div.money_icon { + background-position: 0 -28px; + height: 28px; +} + +#BuildersClubContainer div.shirt_icon { + background-position: 0 -55px; + height: 30px; +} + +#BuildersClubContainer div.ads_icon { + background-position: 0 -85px; + height: 30px; +} + +.bc_icon, +#BuildersClubContainer div.bc_icon { + background-position: 0 -115px; + height: 31px; +} + +#BuildersClubContainer div.gear_icon { + background-position: 0 -146px; + height: 30px; +} + +#BuildersClubContainer div.groups_icon { + background-position: 0 -173px; + height: 23px; +} + +#BuildersClubContainer div.badges_icon { + background-position: 0 -196px; + height: 30px; +} + +#BuildersClubContainer div.beta_icon { + background-position: 0 -228px; + height: 31px; +} + +#BuildersClubContainer div.tbc_icon { + background-position: 0 -263px; + height: 31px; +} + +#BuildersClubContainer div.obc_icon { + background-position: 0 -297px; + height: 31px; +} + +#BuildersClubContainer div.upgrades_enabled { + background-image: url(/images/buybc/bc_sprites_math_enabled.png); + background-repeat: no-repeat; + display: inline-block; + height: 95px; + width: 128px; +} + +#BuildersClubContainer div.upgrades_disabled { + background-image: url(/images/buybc/bc_sprites_math_disabled.png); + background-repeat: no-repeat; + display: inline-block; + height: 95px; + width: 128px; +} + +#BuildersClubContainer div.bcmonthly { + background-position: 0 0; +} + +#BuildersClubContainer div.bc6 { + background-position: -128px 0; +} + +#BuildersClubContainer div.bc12 { + background-position: -256px 0; +} + +#BuildersClubContainer div.bclife { + background-position: -384px 0; +} + +#BuildersClubContainer div.tbcmonthly { + background-position: 0 -95px; +} + +#BuildersClubContainer div.tbc6 { + background-position: -128px -95px; +} + +#BuildersClubContainer div.tbc12 { + background-position: -256px -95px; +} + +#BuildersClubContainer div.tbclife { + background-position: -384px -95px; +} + +#BuildersClubContainer div.obcmonthly { + background-position: 0 -191px; +} + +#BuildersClubContainer div.obc6 { + background-position: -128px -191px; +} + +#BuildersClubContainer div.obc12 { + background-position: -256px -191px; +} + +#BuildersClubContainer div.obclife { + background-position: -384px -191px; +} + +#BuildersClubContainer .bctotbcconversion { + background-image: url(/images/BuyBC/bc_lifetime_tbc_lifetime_discount.png); + background-repeat: no-repeat; + height: 95px; + width: 128px; +} + +#BuildersClubContainer .bctoobcconversion { + background-image: url(/images/BuyBC/bc_lifetime_obc_lifetime_discount.png); + background-repeat: no-repeat; + height: 95px; + width: 128px; +} + +#BuildersClubContainer .tbctoobcconversion { + background-image: url(/images/BuyBC/tbc_lifetime_obc_lifetime_discount.png); + background-repeat: no-repeat; + height: 95px; + width: 128px; +} + +#BuildersClubContainer upgrade_button { + cursor: pointer; +} + +.OBCSellSheet ul { + list-style: armenian; + width: 500px; +} + +.OBCSellSheet ul li { + padding: 10px; + border-bottom: 1px solid #abc; + position: relative; +} + +.OBCSellSheet ul li em { + -moz-background-clip: border; + -moz-background-inline-policy: continuous; + -moz-background-origin: padding; + background: transparent url(/images/obctip.png) no-repeat scroll 0 0; + display: none; + font-style: normal; + height: 45px; + left: -10px; + padding: 15px 0; + position: absolute; + text-align: center; + top: -40px; + width: 300px; + z-index: 2; + color: #FFF; +} + +.hoverover { + cursor: pointer; +} + +.AlertSpace { + color: #6e99c9; + margin: 0 auto; +} + +div.icons, +a.icons { + background-image: url(/images/master_page_image_sprites.png?v=1202010); + background-repeat: no-repeat; + display: inline-block; + vertical-align: middle; +} + +div.message_icon { + background-position: -65px 0; + height: 11px; + width: 13px; + margin: 3px; + float: left; +} + +div.robux_icon { + background-position: -33px 0; + height: 12px; + width: 16px; + margin: 3px; + float: left; +} + +div.tickets_icon { + background-position: -49px 0; + height: 16px; + width: 16px; + margin: 3px; + float: left; +} + +div.friends_icon { + background-position: -78px 0; + height: 14px; + width: 12px; + margin: 3px; + float: left; +} + +a.rss_icon { + background-position: 0 0; + height: 14px; + width: 14px; +} + +a.twitter_icon { + background-position: -14px 0; + height: 16px; + width: 19px; +} + +div.MessageAlert { + height: 17px; + vertical-align: middle; + width: 49%; + float: left; + height: 32px; + overflow: hidden; + background: #FFF; +} + +div.MessageAlert a:hover { + color: #1874CD; +} + +div.RobuxAlert { + padding-top: 2px; + vertical-align: middle; + width: 49%; + float: left; + overflow: hidden; + border-top: 1px solid #6E99C9; + background: #FFF; + height: 29px; +} + +div.RobuxAlert a { + color: Green; + vertical-align: middle; +} + +div.RobuxAlert a:hover { + color: #49b745; +} + +div.TicketsAlert { + padding-top: 2px; + vertical-align: middle; + width: 49%; + float: left; + overflow: hidden; + border-left: 1px solid #6E99C9; + border-top: 1px solid #6E99C9; + background: #FFF; + height: 29px; +} + +div.TicketsAlert a:hover { + color: #FF3000; +} + +div.FriendsAlert { + color: #883000; + height: 20px; + vertical-align: middle; + width: 49%; + float: left; + height: 32px; + overflow: hidden; + border-left: 1px solid #6E99C9; + background: #FFF; +} + +div.FriendsAlert a { + color: #883000; + vertical-align: middle; +} + +div.FriendsAlert a:hover { + color: #00D; +} + +a.MessageAlertCaption { + color: #6e99c9; + vertical-align: middle; + font-weight: bold; +} + +a.RobuxAlertCaption { + color: Green; + vertical-align: middle; + font-weight: bold; +} + +a.TicketsAlertCaption { + color: #fbb117; + vertical-align: middle; + font-weight: bold; +} + +a.FriendsAlertCaption { + color: #883000; + vertical-align: middle; + font-weight: bold; +} + +#Authentication span a { + color: #FFF; +} + +.MySetsDisplayInfo { + padding: 10px 20px 10px 20px; + background: #8bc2ff url(/images/catalog_options_back.png) repeat-x; + border: 0; + margin-bottom: 0; + overflow: hidden; + height: 125px; +} + +.MySetsDisplayInfo h1 { + margin: 0; + padding: 0; + text-align: center; + color: White; + font-size: 16px; + font-weight: bold; +} + +.MySetsDisplayInfo h1 > a { + cursor: pointer; + color: Blue; + font-size: 12px; + font-style: italic; + margin-left: 5px; +} + +.CreateSetButton { + cursor: pointer; + text-decoration: none; +} + +.SetAddButton { + margin-bottom: 3px; + cursor: pointer; + height: 16px; + display: block; + font-size: 12px; + overflow: hidden; + width: 100px; +} + +.CreateSetButton:hover, +.SetAddButton:hover { + background-color: Gray; +} + +.SetAddButtonAlreadyContainsItem { + margin-bottom: 3px; + height: 16px; + display: block; + width: 100%; + cursor: default; + color: #ddd; + font-style: italic; + font-size: 12px; + background: url(/images/accept.png) no-repeat center left; + background-position: 1px 0; + padding-left: 18px; + width: 92px; + overflow: hidden; +} + +.CantAddToSetLabel { + float: left; + width: 75px; +} + +.CantAddToSetHelpImg { + float: left; + vertical-align: text-top; + cursor: pointer; +} + +.SetDescription { + float: left; + overflow-y: auto scroll; + overflow-x: hidden; +} + +.SetList { + z-index: 10; + height: 0; + float: left; + width: 0; +} + +.friendBarDropDown { + position: absolute; + margin-top: 0; + margin-left: 28px; + z-index: 10; +} + +.SetList > img { + position: relative; + float: left; + z-index: 10; + width: 20px; + cursor: pointer; + top: 5px; + left: 5px; +} + +.CantAddToSetLabel, +.SetListDropDownList { + float: left; + position: relative; + top: -18px; + left: 20px; + z-index: 11; + display: block; +} + +.CantAddToSetLabel, +.SetListDropDownList { + background: #6e99c9; + width: 100px; + border: 3px solid #C6D9FD; + padding: 3px; +} + +.SetListDropDown, +.friendBarDropDownList { + display: none; + float: left; + z-index: 10; + height: 0; +} + +.friendBarDropDownList { + position: relative; + height: 100%; + width: 120px; + border: 1px solid black; +} + +.friendBarDropDownList > ul { + list-style: none outside none; + margin: 0; + padding-left: 0; +} + +.friendBarDropDownList li { + background-color: White; + color: Black; + cursor: default; + float: left; + position: relative; + list-style: none; + display: block; + z-index: 11; + height: 18px; +} + +.friendBarDropDownList li > div { + margin: 2px; + width: 116px; +} + +.friendBarDropDownList li:hover { + background-color: Black; + color: White; +} + +.friend_dropdownbutton20 { + background: url(/images/friendsbar/friend_dropdownBtn20h.jpg); + float: left; + cursor: pointer; + height: 20px; + width: 20px; + background-position: top left; +} + +.friend_dropdownbutton20:hover { + background-position: bottom left; +} + +.ContestButton { + float: left; + font-size: 20px; + padding: 4px 10px; + background: url(/images/Contests/contestbutton.png) repeat-x; + color: #FFF; + border: 2px solid #193441; + cursor: pointer; + text-align: center; +} + +.ContestButton:hover { + background: #5d90a6; +} + +.ContestButtonSkip { + font-size: 20px; + padding: 4px 10px; + background-color: #283d47; + color: #FFF; + border: 2px solid #193441; + cursor: pointer; + text-align: center; +} + +.ContestButtonSkip:hover { + background: #5d90a6; +} + +ul.ContestPrizes { + list-style: none; + margin: 0; + padding: 0; +} + +a.slider_next { + color: #444; + font-size: 20px; + font-weight: bold; +} + +a.slider_prev { + color: #444; + font-size: 20px; + font-weight: bold; +} + +a.contesttab { + float: left; + background: #B2C1D2; + padding: 3px 5px; + color: #FFF; + margin-right: 4px; + text-decoration: none; + display: block; + font-size: 14px; + font-weight: bold; +} + +a.contesttab:hover { + background: #6E99C9; +} + +a.contesttabselected { + float: left; + background: #6E99C9; + padding: 3px 5px; + color: #FFF; + margin-right: 4px; + text-decoration: none; + display: block; + font-size: 14px; + font-weight: bold; +} + +div.ContestBox { + border: 2px solid #6E99C9; + background: url(/images/Contests/contestback.png?v=2) repeat-x; + background-color: #c5d3e3; + float: left; + margin-bottom: 10px; + padding: 10px; +} + +.Contests { + float: left; + width: 900px; + margin: 10px auto 0 auto; +} + +.Contests h1 { + margin: 0; + color: #6E99C9; + float: left; + width: 100%; +} + +.FullSubmissions { + width: 300px; + padding: 5px; + float: left; + margin-left: 3px; + margin-bottom: 1px; + border-bottom: 1px solid #FFF; + color: #000; +} + +.ContestShowcase { + width: 90%; + padding: 2px; + border: 2px solid transparent; + cursor: pointer; + margin: 2px auto; + background: #d5dec2; +} + +.ContestShowcase:hover { + border: 2px solid #AAA; +} + +.VibModalBack { + z-index: 665; + position: fixed; + width: 100%; + height: 100%; + background: gray; + opacity: 0.5; + filter: alpha(opacity=50); + background-repeat: repeat; + top: 0; + left: 0; +} + +.VibModal { + z-index: 666; + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; +} + +.VibModalBox { + z-index: 667; + width: 500px; + margin: 7% auto; + background: #FFF; + border: 5px solid #6E99C9; +} + +.VibModalContents { + padding: 10px; +} + +.VibModalHeader { + width: 96%; + padding: 1% 2%; + font-size: 20px; + font-weight: bold; + background: #6E99C9; + text-align: center; + color: #FFF; +} + +.VibModalClose { + font-size: 25px; + color: #F00; + font-weight: bold; + float: right; + line-height: 17px; + cursor: pointer; +} + +div.cannot_vote { + height: 30px; + width: 30px; + background: url(/images/Contests/not_checked_box.png); + vertical-align: text-top; + margin-right: 7px; + float: left; +} + +div.can_vote { + height: 30px; + width: 30px; + background: url(/images/Contests/checked_box.png); + vertical-align: text-top; + margin-right: 7px; + float: left; +} + +div.vote_text { + font-size: 18px; + float: left; + color: #0F0; +} + +div.no_vote_text { + font-size: 18px; + float: left; + color: #F00; +} + +.Contests .StatCounters { + position: absolute; + font-size: 30px; + font-weight: bold; + color: #444; + text-align: left; + margin-left: 10px; + z-index: 4000; +} + +.Contests .StatType { + font-size: 14px; + margin-left: 4px; + margin-top: -7px; + display: block; +} + +.Contests .PlaceOpaqueName { + width: 148px; + font-weight: bold; + text-align: center; + padding: 3px 6px; + font-size: 10px; + color: #444; + background: #FFF; + opacity: 0.6; + filter: alpha(opacity=60); + margin: 1px auto 7px auto; + height: 24px; + overflow: hidden; + word-wrap: none; +} + +.Contests .FifthPlaceHolder { + float: left; + width: 20%; + margin-top: 5px; + margin: 0 auto; + text-align: center; +} + +div.friend_dock_chatbox { + float: left; + background-color: #E5E3E4; + width: 200px; + margin-right: 10px; + border: solid 1px #7F7F7F; + padding-bottom: 10px; +} + +div.friend_dock_chatsettings { + color: Black; + background-color: #E5E5E5; + border: solid 1px black; + width: 150px; + margin-right: 10px; + position: fixed; + bottom: 105px; + font-size: 11px; + z-index: 1200; + right: 30px; +} + +div.chat_settings_group_header { + font-weight: bold; + margin-bottom: 5px; +} + +div#friend_dock_chatholder { + position: fixed; + bottom: 106px; + z-index: 1022; +} + +div#friend_dock_container { + position: fixed; + bottom: 0; + width: 100%; + font-size: 10px; + font-family: Verdana; + z-index: 1022; +} + +div#friend_dock_titlebar ul { + padding: 0; + margin: 0; + list-style-type: none; +} + +div#friend_dock_thumb_container { + border: solid 1px #7F7F7F; + background-color: White; + height: 74px; + padding: 5px; + width: 100%; + overflow: hidden; +} + +div#friend_dock_thumbnails { + float: left; +} + +div#friend_dock_titlebar { + height: 18px; + position: relative; +} + +div#friend_dock_titlebar a { + color: Black; +} + +div#friend_dock_minimized_container { + width: 100%; + position: fixed; + bottom: 0; + z-index: 1022; +} + +div#friend_dock_friendzone, +div#friend_dock_chatzone { + float: left; + height: 65px; + margin-top: 5px; + margin-right: 10px; + margin-left: 10px; +} + +div.friend_dock_chatbox_closebutton { + float: right; + padding-right: 5px; + font-weight: bold; + font-size: 14px; +} + +div.friend_dock_chatbox_closebutton a.hover { + color: #fff; + text-decoration: none; +} + +div.blinkoffheader, +div.blinkonheader { + background-repeat: repeat-x; + border: none; + height: 16px; + padding: 2px; +} + +div.blinkoffheader { + background-image: url("/images/chat/HeaderBarRepeat1x1.jpg"); +} + +div.blinkonheader { + background-image: url("/images/chat/HeaderBarRepeat1x1_orange.jpg"); +} + +div.friend_dock_chatbox_username { + width: 150px; + float: left; + font-size: 14px; + color: White; +} + +div.friend_dock_chatbox_chat { + background-color: White; + border: solid 1px black; + margin-left: 10px; + margin-top: 5px; + margin-bottom: 10px; + width: 176px; + padding: 2px; + height: 196px; + overflow: auto; +} + +textarea.friend_dock_chatbox_entry { + margin-left: 10px; + width: 176px; + padding: 2px; + overflow: auto; + overflow-x: hidden; +} + +span.friend_dock_onlinestatus { + position: absolute; + margin-left: 16px; + width: 16px; + height: 16px; + background-image: url(/images/online.png); + background-repeat: no-repeat; +} + +span.friend_dock_offlinestatus { + position: absolute; + margin-left: 16px; + width: 16px; + height: 16px; + background-image: url(/images/offline.png); + background-repeat: no-repeat; +} + +div.friend_dock_onlinestatus { + position: absolute; + margin-top: 5px; + margin-left: 5px; + width: 16px; + height: 16px; + background-image: url(/images/online.png); + background-repeat: no-repeat; +} + +div.friend_dock_offlinestatus { + position: absolute; + margin-top: 5px; + margin-left: 5px; + width: 16px; + height: 16px; + background-image: url(/images/offline.png); + background-repeat: no-repeat; +} + +div.friend_dock_newmessage { + position: absolute; + margin-top: -5px; + margin-left: 42px; + width: 16px; + height: 16px; + background-image: url(/images/newmessage.png); + background-repeat: no-repeat; +} + +div.friend_dock_friend { + width: 50px; + height: 70px; + overflow: hidden; + margin-right: 10px; + margin-bottom: 10px; + float: left; +} + +div.friend_dock_pager { + width: 16px; + height: 16px; + margin-left: 0; + margin-right: 10px; + margin-bottom: 10px; + margin-top: 25px; +} + +.Navigation { + height: 35px; + z-index: 1022; +} + +.Navigation ul { + list-style: none; + margin: 0; + padding: 0; + width: 890px; + margin: 0 auto; +} + +.Navigation ul li { + float: left; + position: relative; +} + +.Navigation ul li a, +.Navigation ul li a:visited { + display: inline-block; + color: #FFF; + padding: 0 9px; + border-left: 1px solid #FFF; + font-size: 18px; +} + +.Navigation ul li a h1, +.Navigation ul li a h2 { + cursor: pointer; +} + +.Navigation ul li:first-child a { + border-left: none; +} + +.Navigation .dropdownnavcontainer { + display: none; + position: absolute; + margin-left: 126px; + margin-top: 27px; + z-index: 1024; +} + +.Navigation .dropdownmainnav { + display: block; + background: #6E99C9; + border-left: 1px solid #FFF; + border-right: 1px solid #FFF; + border-bottom: 1px solid #FFF; + padding: 10px; + width: 250px; + float: left; + z-index: 1024; + height: 225px; +} + +.Navigation .dropdownmainnav a { + color: White; +} + +.Navigation .dropdownmainnav a:hover { + text-decoration: underline; +} + +.friend_dock_username { + height: 15px; + overflow: hidden; + float: left; + width: 55px; +} + +.friend_dock_username_href { + color: Black !important; + font-size: 10px; + font-family: Verdana; +} + +div#chatbar { + position: fixed; + bottom: 0; + left: 0; + height: 0; + font-size: 11px; + font-family: Verdana; + margin: 0 1%; + z-index: 1022; +} + +div#statusbar { + position: fixed; + bottom: 0; + left: 0; + height: 30px; + background: url(/CSS/Base/CSS/chatbarback.jpg); + border-left: 3px solid #E5E5E5; + border-right: 3px solid #E5E5E5; + font-size: 11px; + font-family: Verdana; + margin: 0 1%; + z-index: 1022; +} + +#chat { + float: left; +} + +.chat_box { + border-left: 2px solid #6E99C9; + border-right: 2px solid #6E99C9; + width: 217px; + float: left; + height: 280px; + overflow-y: scroll; + overflow-x: none; + background: #eee; + font-size: 11px; + font-family: Verdana; +} + +.chat_text { + width: 80%; + padding: 4px; + float: left; + font-size: 11px; + font-family: Verdana; +} + +.chat_name { + color: #88a9bf; + border-bottom: 1px solid #CCC; + font-weight: bold; + padding: 3px; + float: left; + font-size: 11px; + font-family: Verdana; + width: 75%; +} + +.chat_header { + width: 211px; + float: left; + color: #03C; + background: #6E99C9; + color: #000; + font-weight: bold; + font-size: 12px; + margin: 0; + padding: 5px; + font-family: Verdana; +} + +.chat_options { + width: 219px; + float: left; + color: #03C; + background: #6E99C9; + color: #000; + font-weight: bold; + font-size: 12px; + margin: 0; + padding: 1px; + font-family: Verdana; +} + +#chat_close { + background: url(/CSS/Base/CSS/close.png); + height: 10px; + width: 10px; + float: right; + cursor: pointer; + margin-right: 1px; +} + +#chat_mini { + background: url(/CSS/Base/CSS/mini.png); + height: 10px; + width: 10px; + float: right; + cursor: pointer; + margin-right: 5px; +} + +.chat_abuse { + color: #FFF; + background: yellow; + color: #000; + font-weight: bold; + padding: 1px; + cursor: pointer; + font-family: Verdana; + font-size: 7px; + float: left; +} + +.chat_abuse:hover { + color: #FFF; + background: red; + color: #000; + font-weight: bold; + padding: 1px; + cursor: pointer; + font-family: Verdana; + font-size: 7px; + float: left; +} + +.chat_wrapper { + width: 221px; + background: #eee; + position: absolute; + bottom: 0; + float: left; + z-index: 1022; + margin-left: 3px; +} + +#chatfix { + position: fixed; + bottom: 0; + left: 176px; + z-index: 1337; +} + +.chat_input { + float: left; + background: #eee; + border-right: 2px solid #6E99C9; + border-left: 2px solid #6E99C9; + border-bottom: 2px solid #6E99C9; + border-top: 1px solid #6E99C9; + width: 217px; +} + +.chat_contents { + bottom: 27px; + display: none; +} + +.roster_box { + border-bottom: 2px solid #bcbcbc; + float: left; + cursor: pointer; + padding: 4px; + width: 125px; +} + +.roster_box:hover { + border-bottom: 2px solid #bcbcbc; + float: left; + cursor: pointer; + background: #eee; + padding: 4px; + width: 125px; +} + +.roster_name { + margin-left: 5px; +} + +.roster_alert { + margin: 1px; + padding: 1px; + font-size: 11px; + font-family: Verdana; +} + +#roster { + float: left; + font-size: 11px; + font-family: Verdana; + display: none; + height: 331px; + overflow-y: scroll; + background: #d8e0e9; + margin: 5px; + width: 150px; + position: absolute; + left: 0; + bottom: 25px; + z-index: 1022; +} + +#roster-wrapper { + float: left; + height: 1px; + width: 170px; +} + +#chat_friends { + float: left; + height: 20px; + color: #000; + font-weight: bold; + padding-left: 33px; + padding-top: 7px; + width: 119px; + cursor: pointer; +} + +#chat_friends:hover { + float: left; + height: 20px; + background: #d8e0e9; + color: #000; + font-weight: bold; + padding-left: 33px; + padding-top: 7px; + width: 119px; + cursor: pointer; +} + +#statusbar_wrapper { + padding-top: 3px; + float: left; +} + +#long-wrapper { + float: left; +} + +#chatlog { + float: left; + padding: 3px; + color: Green; +} + +.chat-unavailable { + background: url(/CSS/Base/CSS/unavailable.png); + height: 15px; + width: 15px; + float: left; +} + +.chat-available { + background: url(/CSS/Base/CSS/available.png); + height: 15px; + width: 15px; + float: left; +} + +.chat-default { + height: 15px; + width: 15px; + float: left; +} + +.chat_send_button { + background: #eee; + border: 0 solid #FFF; + float: left; + line-height: 17px; + height: 18px; + border-left: 2px solid #CCC; + border-bottom: 0; + border-right: 0; + border-top: 0; + padding: 3px; + cursor: pointer; +} + +.chat_send_button:hover { + background: #D8E0E9; + border: 0 solid #FFF; + float: left; + line-height: 17px; + height: 18px; + border-left: 2px solid #CCC; + border-bottom: 0; + border-right: 0; + border-top: 0; + padding: 3px; + cursor: pointer; +} + +.chat_send_input { + border: 0 solid #FFF; + float: left; + height: 22px; + font-size: 12px; + padding: 2px; +} + +.chat_close { + cursor: pointer; + color: #FFF; + font-size: 16px; + line-height: 11px; + padding-right: 8px; + float: left; + padding-top: 6px; +} + +.chat_close:hover { + cursor: pointer; + color: #000; + font-size: 16px; + line-height: 11px; + padding-right: 8px; + float: left; + padding-top: 6px; +} + +.chat_entry_click { + cursor: pointer; + padding-right: 10px; + padding-top: 7px; + padding-left: 10px; + padding-bottom: 7px; + padding-top: 6px; +} + +.chat_entry { + float: left; + background: #d8e0e9; + height: 27px; + color: #000; + font-weight: bold; + cursor: pointer; + width: 221px; +} + +#chat_login { + margin-top: 1px; + margin-left: 2px; + float: left; +} + +#chat_logout { + margin-top: 1px; +} + +#chat-availability { + float: left; +} + +#partycontainer { + position: fixed; + bottom: 91px; + z-index: 1022; +} + +.ActiveChatThumb { + z-index: 10; + cursor: pointer; +} + +.RemoveActiveChat { + position: absolute; + z-index: 10; + cursor: pointer; + margin-left: 40px; +} + +.clear { + overflow: hidden; + width: 100%; +} + +.followme_green19h { + background-image: url("/images/Buttons/followme_19h.png"); + background-repeat: no-repeat; + background-position: left top; + height: 19px; + cursor: pointer; + width: 65px; + float: left; + text-align: center; +} + +.followme_green19h:hover { + background-position: left bottom; +} + +.followme_gray19h { + background-image: url("/images/Buttons/followme_19h-gray.png"); + background-repeat: no-repeat; + background-position: left top; + height: 19px; + cursor: pointer; + width: 65px; + float: left; + text-align: center; +} + +.followme_gray19h:hover { + background-position: left bottom; +} + +.tab_white19h, +.tab_white19hselected { + background: transparent url("/images/friendsbar/tab_white19h_l2.gif") no-repeat left top; + color: #444; + display: block; + float: left; + font: normal 12px verdana, sans-serif; + text-decoration: none; + padding-left: 2px; + height: 19px; + outline: none; + cursor: pointer; +} + +.tab_white19h span, +.tab_white19hselected span { + background: transparent url("/images/friendsbar/tab_white19h_r2.gif") no-repeat right top; + display: block; + height: 15px; + padding: 2px 15px 2px 7px; + text-decoration: none; +} + +.tab_white19h:hover, +.tab_white19hselected { + background-position: left bottom; + color: #000; + outline: none; + text-decoration: none; +} + +.tab_white19h a, +.tab_white19hselected a { + text-decoration: none; + outline: none; +} + +.tab_white19h:hover span, +.tab_white19hselected span { + background-position: right bottom; + padding: 3px 15px 1px 7px; + text-decoration: none; +} + +.tab_white19h_flash { + background: transparent url("/images/friendsbar/tab_blue19h_l.gif") no-repeat left top; +} + +.tab_white19h_flash span { + background: transparent url("/images/friendsbar/tab_blue19h_r.gif") no-repeat right top; + color: White; +} + +.bold { + font-weight: bold; +} + +.clear { + clear: both; +} + +.alignCenter { + text-align: center; +} + +.InGamePopup { + background: url(/images/css/containerBkg_01.png); + _overflow: hidden; +} + +.voteYes { + background: url(/images/css/button_vote.jpg); + width: 24px; + height: 23px; + background-position: top left; +} + +.voteYes:hover { + background-position: bottom left; +} + +.voteNo { + background: url(/images/css/button_vote.jpg); + width: 24px; + height: 23px; + background-position: top right; +} + +.voteNo:hover { + background-position: bottom right; +} + +#MyAccountBalanceContainer { + font-family: Verdana, Helvetica, Sans-Serif; +} + +#MyAccountBalanceContainer h2 { + font-family: Verdana, Helvetica, Sans-Serif; + font-size: 2.5em; + font-weight: normal; + letter-spacing: 0.4em; + line-height: 1em; + margin: 10px 0 0 -2px; + padding: 0; +} + +#MyAccountBalanceContainer h3 { + background-color: #ccc; + border-bottom: solid 1px #000; + font-family: Verdana, Helvetica, Sans-Serif; + font-size: 1.7em; + font-weight: normal; + letter-spacing: 0.1em; + line-height: 1em; + margin: 0; + padding: 5px; + text-align: center; +} + +#MyAccountBalanceContainer h4 { + font-family: Verdana, Sans-Serif; + font-size: 13px; + font-weight: bold; + margin: 5px 0; + padding: 5px 5px 5px 15px; + color: #900; +} + +#MyAccountBalanceContainer #AboutRobux { + border-bottom: solid 1px #000; + border-left: solid 1px #000; + border-right: solid 1px #000; + float: right; + margin-top: 20px; + width: 275px; +} + +#MyAccountBalanceContainer #AboutRobux h3 { + border-top: solid 1px #000; +} + +#MyAccountBalanceContainer #AboutRobux p { + margin: 0; + padding: 10px 15px; +} + +#MyAccountBalanceContainer #Earnings { + border: solid 1px #000; + margin-top: 20px; + padding-bottom: 10px; + width: 600px; +} + +#MyAccountBalanceContainer .Earnings_Period { + margin-bottom: 20px; +} + +#MyAccountBalanceContainer .Earnings_LoginAward, +#MyAccountBalanceContainer .Earnings_PlaceTrafficAward, +#MyAccountBalanceContainer .Earnings_Ambassador { + padding: 0 0 0 50px; + height: 16px; + background-color: #eee; +} + +#MyAccountBalanceContainer .Earnings_SaleOfGoods, +#MyAccountBalanceContainer .Earnings_PeriodTotal, +#MyAccountBalanceContainer .Earnings_LoginAwardBC, +#MyAccountBalanceContainer .Earnings_Currency { + padding: 0 0 0 50px; + height: 16px; +} + +#MyAccountBalanceContainer .Earnings_LoginAward .Label, +#MyAccountBalanceContainer .Earnings_LoginAwardBC .Label, +#MyAccountBalanceContainer .Earnings_PlaceTrafficAward .Label, +#MyAccountBalanceContainer .Earnings_SaleOfGoods .Label, +#MyAccountBalanceContainer .Earnings_Ambassador .Label, +#MyAccountBalanceContainer .Earnings_Currency .Label { + float: left; + width: 380px; +} + +#MyAccountBalanceContainer .Earnings_PeriodTotal .Label { + float: left; + padding-right: 10px; + text-align: right; + width: 370px; +} + +#MyAccountBalanceContainer .Earnings_PeriodTotal .Field { + color: Blue; + font-weight: bold; +} + +#MyAccountBalanceContainer .Field { + float: right; + width: 75px; +} + +#MyAccountBalanceContainer .Zebra { + background-color: #eee; +} + +table.stats { + text-align: center; + font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; + font-weight: normal; + font-size: 11px; + color: #fff; + width: 280px; + background-color: #666; + border: 0; + border-collapse: collapse; + border-spacing: 0; +} + +table.stats td { + background-color: #CCC; + color: #000; + padding: 4px; + text-align: left; + border: 1px #fff solid; +} + +table.stats td.hed { + background-color: #666; + color: #fff; + padding: 4px; + text-align: left; + border-bottom: 2px #fff solid; + font-size: 12px; + font-weight: bold; +} + +#AssetContainer { + margin: 0 auto; + width: 620px; +} + +#AssetContainer h2 { + color: #333; + font-size: x-large; + margin-bottom: 5px; +} + +#AssetContainer #Asset { + background-color: #eee; + border: solid 1px #000; + color: #555; +} + +#BadgesContainer { + border: solid 1px #000; +} + +#BadgesContainer .Legend .BadgesList { + color: #666; + float: left; + list-style: none; + margin: 0; + padding: 0; +} + +#BadgesContainer .Legend .BadgesList li { + background-color: #fff; + background-position: 0 5px; + background-repeat: no-repeat; + margin: 10px 0 20px 0; + padding: 0 0 7px 80px; + border: solid 1px #000; +} + +#CommunityBadges .Legend, +#FriendshipBadges .Legend, +#CombatBadges .Legend, +#VisitsBadges .Legend { + float: left; + padding: 5px 15px 5px 5px; + width: 500px; +} + +#StatisticsRankingsPane_Friendship, +#StatisticsRankingsPane_Combat, +#StatisticsRankingsPane_Visits, +#FeaturedBadge_Community { + float: right; + margin: 15px; + width: 300px; +} + +#FeaturedBadge_Community { + border: solid 1px #000; + margin-top: 20px; + width: 325px; + background-color: White; +} + +#TurboBuildersClubBadge_Community { + border: solid 1px #000; + margin: 15px 15px 15px 15px; + background-color: White; + float: left; +} + +#OutrageousBuildersClubBadge_Community { + border: solid 1px #000; + margin: 15px 15px 15px 15px; + background-color: White; + float: left; +} + +#FeaturedBadge_Community h4, +#OutrageousBuildersClubBadge_Community h4 { + background-color: #6e99c9; + border-bottom: solid 1px #000; + color: #fff; + font-size: 1.4em; + font-weight: bold; + letter-spacing: 0.2em; + margin: 0; + padding: 3px; + text-align: center; +} + +#OutrageousBuildersClubBadge_Community h4 { + background-color: #000; + color: #FFF; + border-bottom: solid 1px #000; +} + +#OutrageousBuildersClubBadge_Community h4 .OutrageousSpan { + color: White; +} + +.FeaturedOBCContent .FeaturedOBCDescription { + color: #222; + margin: 10px 10px 10px 10px; + font-size: 14px; +} + +.FeaturedOBCIcon { + margin: 10px 10px 10px 10px; + float: left; + vertical-align: text-top; + width: 150px; +} + +#OutrageousBuildersClubBadge_Community { + margin: 10px 10px 10px; +} + +#FeaturedBadge_Community h4, +#TurboBuildersClubBadge_Community h4 { + background-color: #6e99c9; + border-bottom: solid 1px #000; + color: #fff; + font-size: 1.4em; + font-weight: bold; + letter-spacing: 0.2em; + margin: 0; + padding: 3px; + text-align: center; +} + +#TurboBuildersClubBadge_Community h4 { + background-color: #B94542; + color: #6e99FF; + border-bottom: solid 1px #000; +} + +#TurboBuildersClubBadge_Community h4 .TurboSpan { + color: White; +} + +.BadgeHint { + border: dashed 1px #000; + padding: 5px 5px 5px 5px; + background-color: #E8EDFF; +} + +.FeaturedBadgeContent { + margin: 0; + padding: 0 15px 10px 15px; +} + +.FeaturedBadgeContent p { + color: #222; + font-family: Verdana, Sans-Serif; + margin-top: 10px; +} + +.FeaturedBadgeIcon { + float: left; + margin: auto 10px auto 10px; + vertical-align: text-top; + width: 125px; +} + +.FeaturedTBCContent .FeaturedTBCDescription { + color: #222; + font-size: 14px; + margin: 10px 10px 10px 10px; +} + +.FeaturedTBCIcon { + margin: 10px 10px 10px 10px; + float: left; + vertical-align: text-top; + width: 150px; +} + +#TurboBuildersClubBadge_Community { + margin: 10px 10px 10px; +} + +#StatisticsRankingsPane_Community { + border: none; +} + +#BadgesContainer .Legend h4 { + background-color: #fff; + font-size: 1.4em; + font-weight: bold; + margin: 5px 0 5px 0; +} + +#BadgesContainer #CommunityBadges .Legend #Administrator { + background-image: url(/images/Badges/Administrator-75x75.png?v=2); +} + +#BadgesContainer #CommunityBadges .Legend #ForumModerator { + background-image: url(/images/Badges/ForumModerator-75x75.png?v=2); +} + +#BadgesContainer #CommunityBadges .Legend #ImageModerator { + background-image: url(/images/Badges/ImageModerator-75x75.png?v=2); +} + +#BadgesContainer #FriendshipBadges .Legend #Friendship { + background-image: url(/images/Badges/Friendship-75x75.png?v=2); +} + +#BadgesContainer #FriendshipBadges .Legend #Inviter { + background-image: url(/images/Badges/Inviter-75x75.png?v=2); +} + +#BadgesContainer #CombatBadges .Legend #CombatInitiation { + background-image: url(/images/Badges/CombatInitiation-75x75.png?v=2); +} + +#BadgesContainer #CombatBadges .Legend #Warrior { + background-image: url(/images/Badges/Warrior-75x75.png?v=2); +} + +#BadgesContainer #CombatBadges .Legend #Bloxxer { + background-image: url(/images/Badges/Bloxxer-75x75.png?v=2); +} + +#BadgesContainer #VisitsBadges .Legend #Homestead { + background-image: url(/images/Badges/Homestead-70x75.png?v=2); +} + +#BadgesContainer #VisitsBadges .Legend #Bricksmith { + background-image: url(/images/Badges/Bricksmith-54x75.png?v=2); +} + +#BadgesContainer .AccordionHeader, +#BadgesContainer .TopAccordionHeader, +#BadgesContainer .BottomAccordionHeader { + background-color: #ccc; + cursor: pointer; + font-size: 1.4em; + margin: 0 0 1px 0; + padding: 5px; + text-align: center; +} + +#BadgesContainer .AccordionHeader, +#BadgesContainer .BottomAccordionHeader { + border-bottom: solid 1px #000; + border-top: solid 1px #000; +} + +#BadgesContainer .TopAccordionHeader { + border-bottom: solid 1px #000; + border-top: none; +} + +#BadgesContainer .AccordionHeader:hover, +#BadgesContainer .TopAccordionHeader:hover, +#BadgesContainer .BottomAccordionHeader:hover { + background-color: #6e99c9; + color: #fff; +} + +.StatisticsRankings { + background-color: #eee; +} + +.StatisticsRankings h4 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-size: 1.2em; + margin: 0; + text-align: center; +} + +.StatisticsRankingsHeader_Rank, +.StatisticsRankingsHeader_Item, +.StatisticsRankingsHeader_Score { + border: solid 1px #000; + float: left; + font-weight: bold; + padding: 2px 0 2px 0; + text-align: center; +} + +.StatisticsRankingsHeader_Rank { + margin-right: 1px; + width: 45px; +} + +.StatisticsRankingsHeader_Item { + margin-right: 1px; + width: 150px; +} + +.StatisticsRankingsHeader_Score { + width: 95px; +} + +.StatisticsRanking, +.StatisticsRanking_AlternatingRow, +.StatisticsRanking_UserCentric, +.StatisticsRanking_UserCentric_AlternatingRow { + font: normal 0.9em/normal Verdana, sans-serif; +} + +.StatisticsRanking_UserCentric a, +.StatisticsRanking_UserCentric a:link, +.StatisticsRanking_UserCentric a:visited, +.StatisticsRanking_UserCentric a:active, +.StatisticsRanking_UserCentric_AlternatingRow a, +.StatisticsRanking_UserCentric_AlternatingRow a:link, +.StatisticsRanking_UserCentric_AlternatingRow a:visited, +.StatisticsRanking_UserCentric_AlternatingRow a:active { + color: #fff; +} + +.StatisticsRanking .StatisticsRanking_Rank, +.StatisticsRanking .StatisticsRanking_Item, +.StatisticsRanking .StatisticsRanking_Score, +.StatisticsRanking_AlternatingRow .StatisticsRanking_Rank, +.StatisticsRanking_AlternatingRow .StatisticsRanking_Item, +.StatisticsRanking_AlternatingRow .StatisticsRanking_Score { + border: solid 1px #000; + float: left; + padding: 2px 0 2px 0; + text-align: center; +} + +.StatisticsRanking .StatisticsRanking_Rank, +.StatisticsRanking_AlternatingRow .StatisticsRanking_Rank { + margin-right: 1px; + width: 45px; +} + +.StatisticsRanking .StatisticsRanking_Item, +.StatisticsRanking_AlternatingRow .StatisticsRanking_Item { + margin-right: 1px; + width: 150px; +} + +.StatisticsRanking .StatisticsRanking_Score, +.StatisticsRanking_AlternatingRow .StatisticsRanking_Score { + width: 95px; +} + +.StatisticsRanking_UserCentric .StatisticsRanking_Rank, +.StatisticsRanking_UserCentric .StatisticsRanking_Item, +.StatisticsRanking_UserCentric .StatisticsRanking_Score, +.StatisticsRanking_UserCentric_AlternatingRow .StatisticsRanking_Rank, +.StatisticsRanking_UserCentric_AlternatingRow .StatisticsRanking_Item, +.StatisticsRanking_UserCentric_AlternatingRow .StatisticsRanking_Score { + background-color: #6e99c9; + border: solid 1px #000; + color: #fff; + float: left; + font-weight: bold; + padding: 2px 0 2px 0; + text-align: center; +} + +.StatisticsRanking_UserCentric .StatisticsRanking_Rank, +.StatisticsRanking_UserCentric_AlternatingRow .StatisticsRanking_Rank { + margin-right: 1px; + width: 45px; +} + +.StatisticsRanking_UserCentric .StatisticsRanking_Item, +.StatisticsRanking_UserCentric_AlternatingRow .StatisticsRanking_Item { + margin-right: 1px; + width: 150px; +} + +.StatisticsRanking_UserCentric .StatisticsRanking_Score, +.StatisticsRanking_UserCentric_AlternatingRow .StatisticsRanking_Score { + width: 95px; +} + +.StatisticsRankingsFooter { + border-top: solid 1px #000; + padding: 2px 1px 2px 1px; +} + +.RankingsPeriodSelector { + font-family: Verdana, Sans-Serif; + font-size: xx-small; + width: 100%; +} + +.TileBadges { + float: left; + margin: 10px 10px; + text-align: center; +} + +#CatalogContainer { + font-family: Verdana, Sans-Serif; + min-width: 0; + position: relative; +} + +#CatalogContainer h2 { + font-family: Verdana, Sans-Serif; + font-weight: normal; + letter-spacing: 0.1em; + line-height: 24px; + padding: 0; + color: #555; + font-size: 14px; + margin-left: 10px; +} + +#BrowseMode ul li h3 a { + font-weight: normal; + font-size: 14px; +} + +#CatalogContainer ul { + font-family: Verdana, Sans-Serif; + list-style: none; + margin: 0 0 20px 0; + padding-left: 0; +} + +#CatalogContainer ul li { + margin: 5px 0 5px 10px; + font-family: Arial, Helvetica, sans-serif; + padding-left: 20px; + font-size: 14px; +} + +#CatalogContainer .Selected { + background: url("/images/gamesPage_filterArrow.png") no-repeat scroll 0 1px transparent; +} + +#CatalogContainer .DisplayFilters { + width: 185px; + background-color: White; + border: solid 2px #6e99c9; +} + +#CatalogContainer .Assets { + float: left; + min-width: 0; + overflow: hidden; + padding-bottom: 10px; + padding-left: 0; + padding-right: 0; + position: relative; + width: 680px; +} + +#CatalogContainer .SearchBar { + background-color: #eee; + border: solid 1px #bbb; + height: 30px; + margin: -5px 0 5px 0; + padding: 0; + text-align: center; +} + +#CatalogContainer .SearchBar .SearchBox, +#CatalogContainer .SearchBar .SearchButton { + height: 30px; + margin: 0; + padding: 0; +} + +#CatalogContainer .SearchBar .TextBox { + border: solid 1px #000; + height: 19px; + margin: 2px 0 0 0; + padding: 2px 3px 0 3px; + width: 250px; +} + +#CatalogContainer .SearchLinks { + z-index: 9; + display: inline; +} + +#CatalogContainer .SearchLinks a span { + display: none; +} + +#CatalogContainer .SearchLinks a:hover { + text-decoration: none; + border: none; +} + +#CatalogContainer .SearchLinks a:hover span { + display: block; + position: absolute; + top: 20px; + left: 15%; + width: 60%; + padding: 5px; + margin: 5px; + z-index: 10; + color: white; + background-color: #6e99c9; + border-width: 1px; + border-color: Gray; + border-style: ridge; + text-decoration: none; + line-height: 1.4em; + font: 11px Verdana, sans-serif; + text-align: center; +} + +#CatalogContainer .SearchError { + clear: both; + margin: 2px; + float: none; + padding: 2px; + text-align: center; + color: Red; +} + +#CatalogContainer .Assets .HeaderPager, +#CatalogContainer .Assets .FooterPager { + padding: 2px 0; + text-align: right; +} + +#CatalogContainer .Assets .HeaderPager { + margin-bottom: 10px; +} + +#CatalogContainer .Assets .HeaderPager .Label, +#CatalogContainer .Assets .FooterPager .Label { + font-size: 1em; + vertical-align: middle; +} + +#CatalogContainer .Asset { + margin: -1px 0 15px -1px; + vertical-align: top; + width: 122px; +} + +#CatalogContainer .Asset .AssetThumbnail { + border: solid 1px #EEE; + height: 110px; + text-align: center; + width: 110px; + background-color: #FFF; +} + +#CatalogContainer .Asset .AssetDetails { + font-family: Verdana, Sans-Serif; + overflow: hidden; + padding: 2px 0 6px 0; + width: 110px; +} + +#CatalogContainer .AssetName a { + font-size: 0.9em; + font-weight: bold; + line-height: 1.5em; + vertical-align: top; +} + +.AssetsBullet { + padding-right: 3px; +} + +#CatalogContainer .Label, +#CatalogContainer .Detail, +#CatalogContainer .DetailHighlighted, +#CatalogContainer .PriceInRobux, +#CatalogContainer .PriceInTickets { + font-size: 0.8em; +} + +#CatalogContainer .PriceInRobux { + color: Green; + font-weight: bold; +} + +#CatalogContainer .PriceInTickets { + color: #fbb117; + font-weight: bold; +} + +#CatalogContainer .AssetsDisplaySet { + float: left; + font-family: Comic Sans MS, Arial, Sans-Serif; + font-size: 1.5em; +} + +.Assets .StandardBoxHeader { + width: 660px; +} + +.Assets .StandardBox { + width: 660px; +} + +.CustomizeCharacterContainer { + font-family: Verdana, Sans-Serif; + margin: 0; +} + +.CustomizeCharacterContainer h4 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-family: Comic Sans MS, Verdana, Sans-Serif; + margin: 0; + text-align: center; +} + +.CustomizeCharacterContainer .NoResults { + padding: 15px; + text-align: center; +} + +.CustomizeCharacterContainer .TileGroup { + clear: left; + text-align: center; +} + +.CustomizeCharacterContainer .Asset { + float: left; + margin: 5px 7px 5px 0; + text-align: left; + vertical-align: top; + width: 112px; +} + +.CustomizeCharacterContainer .Asset .AssetThumbnail { + height: 110px; + position: relative; + text-align: center; + width: 110px; +} + +.CustomizeCharacterContainer .Asset .AssetDetails { + overflow: hidden; + padding: 2px 0 6px 0; + text-align: left; + width: 110px; +} + +.CustomizeCharacterContainer .AssetName a { + font-size: 0.9em; + font-weight: bold; + line-height: 1.5em; + vertical-align: top; +} + +.CustomizeCharacterContainer .Label, +.CustomizeCharacterContainer .Detail, +.CustomizeCharacterContainer .DetailHighlighted { + font-size: 0.8em; +} + +.CustomizeCharacterContainer .FooterPager { + border-top: solid 1px #000; + clear: left; + margin: 10px 0 0 0; + padding: 3px 0; + text-align: center; +} + +.AttireChooser { + border: solid 1px #000; + float: left; + margin: 0; + min-width: 0; + padding: 0; + position: relative; + text-align: left; + width: 530px; +} + +.Accoutrements { + border: solid 1px #000; + clear: left; + margin-top: 10px; + min-width: 0; + padding: 0; + position: relative; + text-align: left; + width: 530px; +} + +.AttireChooser .AttireCategory { + border-bottom: solid 1px #000; + margin: 0 0 10px 0; + padding: 3px 0; + text-align: center; +} + +.AttireChooser .AttireOptions { + margin: 5px; +} + +.AttireCategory .AttireCategorySelector_Selected { + font-weight: bold; +} + +.AttireChooser .HeaderPager, +.AttireChooser .HeaderPager { + margin-bottom: 10px; +} + +.AttireChooser .HeaderPager .Label, +.AttireChooser .FooterPager .Label { + font-size: 1em; + vertical-align: middle; +} + +.CharacterViewer { + border: solid 1px #000; + float: right; + width: 354px; +} + +.CharacterViewer .ReDrawAvatar { + font-size: 1em; + vertical-align: bottom; + text-align: center; +} + +.Mannequin { + clear: right; + margin-top: 10px; + text-align: center; + width: 354px; +} + +.Mannequin .ColorChooserFrame { + margin: 0 auto; +} + +.TeeShirtBuilder { + border: solid 1px #000; + clear: both; + margin-top: 10px; +} + +div.AspNet-DetailsView-Data ul { + margin: 0; + padding: 0; +} + +div.AspNet-DetailsView-Data li { + margin: 0; + padding: 0; + list-style-type: none; + position: relative; +} + +ul.AspNet-Menu { + position: relative; +} + +ul.AspNet-Menu, +ul.AspNet-Menu ul { + margin: 0; + padding: 0; + display: block; +} + +ul.AspNet-Menu li { + position: relative; + list-style: none; +} + +ul.AspNet-Menu li a, +ul.AspNet-Menu li span { + display: block; + text-decoration: none; +} + +ul.AspNet-Menu ul { + position: absolute; + display: none; +} + +ul.AspNet-Menu li:hover ul ul, +ul.AspNet-Menu li:hover ul ul ul, +ul.AspNet-Menu li.AspNet-Menu-Hover ul ul, +ul.AspNet-Menu li.AspNet-Menu-Hover ul ul ul { + display: none; +} + +ul.AspNet-Menu li:hover ul, +ul.AspNet-Menu li li:hover ul, +ul.AspNet-Menu li li li:hover ul, +ul.AspNet-Menu li.AspNet-Menu-Hover ul, +ul.AspNet-Menu li li.AspNet-Menu-Hover ul, +ul.AspNet-Menu li li li.AspNet-Menu-Hover ul { + display: block; +} + +.AspNet-Menu-Horizontal ul.AspNet-Menu li { + float: left; +} + +.AspNet-Menu-Horizontal ul.AspNet-Menu li li { + float: none; +} + +div.AspNet-TreeView { + margin: 0; + padding: 0; +} + +div.AspNet-TreeView ul { + list-style: none; + margin: 0; + padding: 0; +} + +.AspNet-TreeView-Hide { + display: none; +} + +#ContentBuilderContainer { + margin-top: 10px; +} + +#ContentBuilderContainer h2 { + font-family: Verdana, Sans-Serif; + font-size: 2.5em; + font-weight: normal; + line-height: 1em; + margin: 0; + padding: 0; +} + +#ContentBuilderContainer h3 { + background-color: #ccc; + font-size: 16px; + font-weight: bold; + padding: 5px; + text-align: center; +} + +#ContentBuilderContainer blockquote { + margin: 0 auto; +} + +#ContentBuilderContainer .UploaderPanel, +#ContentBuilderContainer .UpsellPanel { + text-align: center; +} + +#ContentBuilderContainer .SelectorArea { + margin: 0 auto; + margin-bottom: 20px; + margin-top: 20px; + text-align: center; +} + +#ContentBuilderContainer .DisclaimerLink { + z-index: 9; + display: inline; + font-size: 1.2em; +} + +#ContentBuilderContainer .DisclaimerLink a span { + display: none; +} + +#ContentBuilderContainer .DisclaimerLink a:hover { + text-decoration: none; + border: none; +} + +#ContentBuilderContainer .DisclaimerLink a:hover span { + display: block; + position: absolute; + top: 50%; + left: 12%; + width: 75%; + padding: 5px; + margin: 5px; + z-index: 10; + color: white; + background-color: #6e99c9; + border-width: 1px; + border-color: Gray; + border-style: ridge; + text-decoration: none; + line-height: 1.4em; + font: 12px Verdana, sans-serif; + text-align: left; +} + +#TradeCurrencyContainer { + margin-top: 10px; +} + +#TradeCurrencyContainer .TradeBox { + width: 100px; +} + +#TradeCurrencyContainer h2 { + font-size: 2.5em; + font-weight: normal; + line-height: 1em; + margin: 0 0 15px 0; + padding: 0; + text-align: center; +} + +#TradeCurrencyContainer .LeftColumn { + float: left; + width: 230px; +} + +#TradeCurrencyContainer .CenterColumn { + float: left; + width: 410px; +} + +#TradeCurrencyContainer .RightColumn { + float: left; + width: 230px; +} + +#TradeCurrencyContainer h4 { + border-bottom: solid 1px #000; + font-size: 1em; + font-weight: bold; + margin: 0; + padding: 5px; + text-align: center; + display: block; +} + +#TradeCurrencyContainer .AccordionHeader { + background-color: #ccc; + border: solid 1px #000; + cursor: pointer; + font-size: 1em; + font-weight: bold; + letter-spacing: 0.1em; + margin: 1px 0; + padding: 1px 1em; + text-align: center; +} + +#TradeCurrencyContainer .AccordionHeader:hover { + background-color: #6e99c9; + color: #fff; +} + +#CurrencyOffersPane { + float: right; +} + +.TradingDashboard { + margin-bottom: 10px; +} + +.CurrencyQuote, +.CurrencyTrade, +.CurrencyOffers, +.CurrencyBids, +.TradingDashboard { + width: 350px; +} + +.CurrencyQuote, +.CurrencyTrade, +.CurrencyOffers, +.CurrencyBids, +.OpenBids, +.OpenOffers, +.TradeHistory { + border: solid 1px #000; + padding: 0; +} + +.CurrencyQuote, +.CurrencyTrade, +.TradingDashboard, +.OpenBids, +.OpenOffers, +.TradeHistory, +.TradingDashboard .FooterPager { + margin: 0 auto; +} + +.CurrencyTrade, +.TradingDashboard { + margin-top: 20px; +} + +.CurrencyTradeDetails { + padding: 5px; +} + +.CurrencyTradeDetail, +.TradingDashboard .FooterPager { + padding-top: 5px; + text-align: center; +} + +.CurrencyOffers, +.CurrencyBids { + width: 200px; +} + +.CurrencyOffer, +.AlternatingCurrencyOffer, +.CurrencyBid, +.AlternatingCurrencyBid { + padding: 5px; + text-align: center; +} + +.CurrencyQuote .TableHeader, +.CurrencyOffers .TableHeader, +.CurrencyBids .TableHeader { + font-weight: bold; +} + +.CurrencyQuote .TableRow, +.CurrencyOffers .TableRow, +.CurrencyBids .TableRow { + border-top: solid 1px #000; +} + +.CurrencyQuote .Pair, +.CurrencyQuote .Rate, +.CurrencyQuote .Spread, +.CurrencyQuote .HighLow { + float: left; + padding: 5px; + text-align: center; + width: 77px; +} + +.DarkGradientBox { + background: url(/images/DarkGradientW150.png) repeat-y top left; + width: 150px; + color: White; + position: relative; + border: solid 2px #7DADE0; +} + +.DarkGradientBox .DGB_Header { + font-size: 14px; + font-weight: bold; + text-align: center; + padding-top: 5px; + padding-bottom: 0; + border-bottom: solid 2px #6e99c9; +} + +.DarkGradientBox .DGB_TextBox { + border: solid 2px #6e99c9; +} + +.DarkGradientBox .DGB_Label { + color: White; + font-size: 10px; + font-weight: bold; + text-align: left; +} + +.DarkGradientBox .DGB_Button { + cursor: pointer; + background-color: #435D77; + color: White; + text-decoration: none; + border: solid 1px #777; + padding: 6px 10px 6px 10px; + font-family: Verdana, Sans-Serif; + font-size: 12px; + font-weight: bold; + text-align: center; + white-space: nowrap; +} + +.DarkGradientBox .DGB_Button:link, +.DarkGradientBox .DGB_Button:visited { + background-color: #435D77; + color: White; + text-decoration: none; +} + +.DarkGradientBox .DGB_Button:hover, +.DarkGradientBox .DGB_Button:active { + background-color: #B6CCE4; + color: #435D77; + text-decoration: none; +} + +#FriendliestFolkPane { + border-color: #000; + border-style: solid; + border-width: 1px; + height: 184px; + margin-top: 10px; + overflow: auto; + width: 770px; +} + +#FriendliestFolk h4 { + font-size: 10pt; + font-weight: bold; + line-height: 1em; + margin-bottom: 5px; + margin-top: 5px; +} + +#GamesContainer { + font-family: Verdana, Sans-Serif; +} + +#GamesContainer h2 { + font-family: Verdana, Sans-Serif; + font-size: 2.5em; + font-weight: normal; + line-height: 1em; + margin: 0; + padding: 0; +} + +#GamesContainer h4 { + font-family: Verdana, Sans-Serif; + font-size: 1.3em; + font-weight: normal; + letter-spacing: 0.1em; + line-height: 1em; + margin: 15px 0; + padding: 0; +} + +#GamesContainer ul { + font-family: Verdana, Sans-Serif; + list-style: none; + margin: 10px 0 30px 0; + padding-left: 0; +} + +#GamesContainer ul li { + font-family: Verdana, Sans-Serif; + margin-bottom: 0.5em; +} + +#GamesContainer ul a { + font-size: 1.1em; +} + +#GamesContainer .DisplayFilters { + width: 170px; +} + +#GamesContainer #Games { + float: left; + padding-bottom: 10px; + padding-left: 0; + padding-right: 0; + width: 720px; + overflow: visible; +} + +.GameList { + overflow: visible; +} + +#GamesContainer .Ads_WideSkyscraper { + border: solid 1px #000; + float: right; + text-align: right; + width: 160px; +} + +#GamesContainer #Games .FooterPager { + margin: 20px 24px 0 0; + padding: 2px 0; + text-align: right; +} + +#GamesContainer #Games .HeaderPager { + margin: 0 24px 0 100px; + padding: 30px 0; + text-align: left; +} + +#GamesContainer #Games .HeaderPager .Label, +#GamesContainer #Games .FooterPager .Label { + font-size: 1em; + vertical-align: middle; +} + +#GamesContainer .Game { + margin: 0 10px 15px 10px; + vertical-align: top; + width: 162px; +} + +#GamesContainer .Game .GameThumbnail { + border: solid 1px #000; + width: 160px; + height: 100px; + text-align: center; +} + +#GamesContainer .Game .GameDetails { + font-family: Verdana, Sans-Serif; + overflow: hidden; + padding: 2px 0 6px 0; + width: 152px; +} + +.GameDetails12 > GameName { + font-weight: bold; +} + +.GameName { + font-weight: bold; + font-size: 12px; +} + +#GamesContainer .GameName a { + font-size: 0.9em; + font-weight: bold; + line-height: 1.5em; + vertical-align: top; +} + +.GamesBullet { + padding-right: 3px; +} + +#GamesContainer .Label, +#GamesContainer .Detail, +#GamesContainer .DetailHighlighted { + font-size: 0.8em; +} + +#GamesContainer .DetailHighlighted { + color: Red; + font-weight: bold; +} + +#GamesContainer .GamesDisplaySet { + float: left; + font-family: Comic Sans MS, Arial, Sans-Serif; + font-size: 1.5em; +} + +.GamesInfoIcon, +.GenreIcon, +.GearIcon { + margin-top: 1px; + margin-right: 1px; + position: relative; + top: 3px; +} + +.SearchBoxBack .StandardBox { + background: #6e99c9; +} + +.GameFilter { + color: #555; + margin-left: 10px; + font-size: 14px; +} + +.GameFilter ul { + list-style-type: none; + padding-left: 0; + margin: 0; +} + +.GameFilter ul li { + margin: 5px 0; +} + +.GameFilter .SelectedFilter, +.GameFilter .SelectedGenre { + background: url(/images/gamesPage_filterArrow.png) no-repeat 0 1px; + cursor: pointer; + padding-left: 20px; + font-weight: normal; +} + +.GameFilter .GamesFilter, +.GameFilter .GamesGenre { + padding-left: 20px; + display: inline-block; +} + +.GamesGenre h3 { + display: inline-block; + cursor: pointer; + font-weight: normal; +} + +#PlayTabs a { + text-decoration: none; +} + +.SelectedFilter, +.SelectedGenre { + font-weight: normal; +} + +a.DisabledFilter, +a.DisabledFilter:hover { + color: gray; + text-decoration: none; + cursor: default; +} + +a.GamesGenre.DisabledFilter h3, +a.GamesGenre.DisabledFilter:hover h3 { + cursor: default; +} + +#BCOnlyPlaces { + position: relative; + width: 410px; + text-align: center; + float: left; + margin-top: 8px; + margin-bottom: 6px; +} + +#BCOnlyPlaces .StandardBoxHeaderGray { + width: 410px; + height: 27px; + padding: 9px 2px 0 2px; + *padding: 5px 2px 0 2px; +} + +#BCOnlyPlaces .StandardBox { + height: 188px; + padding: 2px 0; +} + +#BCOnlyPlacesTitle { + display: inline; + font-weight: bold; + font-size: 19px; + position: relative; + *margin-left: 5px; +} + +#BCOnlyGamesContent { + width: 370px; + margin: 0 auto; +} + +#BCOnlyGamesContentPrevNavButton { + position: absolute; + top: 105px; + left: 10px; + visibility: hidden; +} + +#BCOnlyGamesContentNextNavButton { + position: absolute; + top: 105px; + right: 10px; +} + +#GenreDescriptionPanel { + float: left; + width: 695px; + font-size: 0.9em; + padding: 10px; + border-top: 1px solid #AAA; +} + +.SearchIconButton { + background: url(/images/searchIcon.png) no-repeat; + cursor: pointer; + width: 16px; + height: 16px; + position: absolute; + top: 5px; + right: 4px; +} + +.GameItem { + padding: 6px; + margin-left: 8px; + margin-bottom: 8px; + position: relative; + text-align: left; +} + +.GameItem:hover { + display: block; + z-index: 99; +} + +.GameItem .AlwaysShown { + position: relative; + width: 160px; + height: 130px; +} + +.GameItem:hover .AlwaysShown { + z-index: 999; +} + +.GameItem .HoverShown { + display: none; + position: absolute; + width: 160px; + padding: 158px 15px 15px; + top: -10px; + left: -10px; + border: solid 1px #888; + background: #fff; + font-size: 11px; + text-align: left; + color: #888; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} + +.GameItem .CreatorName { + position: relative; + top: -5px; + font-size: 11px; + color: #888; +} + +.GameItem .BCOverlay { + position: absolute; + top: 81px; + left: 0; +} + +.GameItem .GenreIcon, +.GameItem .GearIcon { + position: static; + top: 0; + margin-top: 0; + margin-right: 0; +} + +#GamesLeftColumn { + width: 136px; +} + +.groupEmblemThumbnail { + margin-top: 10px; + margin-bottom: 10px; + margin-left: 8px; + margin-right: 8px; + text-align: center; + width: 105px; + overflow: hidden; +} + +#GroupThumbnails { + text-align: center; + margin-bottom: 10px; +} + +.GroupDescriptionThumbnail { + float: left; + clear: none; + margin: 0 10px 10px 0; +} + +.GroupMembers { + width: 100%; +} + +.GroupMembers tr { + padding-bottom: 10px; +} + +.GroupMembers td { + padding: 0 5px 10px 5px; + text-align: center; +} + +.IncompleteFormField { + color: red; +} + +.GroupWallPostButton { + width: 69px; + height: 53px; + margin: 3px 0 4px 0; + float: right; +} + +.GroupWallPostText { + width: 375px; + height: 53px; + float: left; +} + +.GroupDescriptionEdit { + border: none; + border-style: none; +} + +.EmblemAdminImage { + margin: 0x; +} + +.CreateNewGroup { + padding-bottom: 10px; + margin-bottom: 10px; + display: block; + text-align: center; + font-size: 12px; + cursor: pointer; +} + +.CreateNewGroupError { + color: Red; +} + +.GroupMembersAdminTable tr { + text-align: left; +} + +.GroupMembersAdminTable td { + width: 85px; + margin: 2px; +} + +#GroupSearchResults thead tr { + background-color: #B0C4DE; + color: Black; +} + +#GroupSearchResults .GroupEmblemImg { + border: solid 2px #B0C4DE; + padding: 2px; +} + +.selectedSmallThumb { + border: solid 2px #FFE390; +} + +.nonSelectedSmallThumb { + border: solid 2px transparent; +} + +#Help { + border-style: ridge; + border-color: #ddd; + border-width: 5px; + background-color: #eee; + height: 600px; + padding: 1px; +} + +#Help h1 { + text-indent: 10px; +} + +#Help .salesForce, +#Help .salesForce iframe { + margin-left: 5px; + margin-bottom: 10px; + float: left; + width: 625px; + height: 500px; +} + +#Help .avatar { + text-align: center; + display: block; + float: right; + clear: right; + margin-right: auto; + margin-left: auto; + padding-left: 0; + padding-right: 0; +} + +#Help .descriptionPanels { + background-color: Transparent; + background-image: url("/images/Speech Bubble 225.gif"); + width: 225px; + height: 235px; + background-repeat: no-repeat; + margin-top: 40px; +} + +#Help .descriptionPanels p { + font-family: Comic Sans MS; + padding-top: 20px; + padding-right: 40px; + padding-left: 25px; + text-align: left; + color: Navy; + font-size: 9pt; +} + +#Help .navigation { + clear: left; + color: #6e99c9; + border: none; + background-color: Transparent; + font-family: "Comic Sans MS", Verdana, sans-serif; + font-size: 10pt; + font-weight: normal; + text-decoration: none; + text-align: center; +} + +#Help .navigation .MenuItem { + color: #6e99c9; + font-size: 16px; + line-height: 2em; +} + +#Help .navigation a.MenuItem:link, +#Help .navigation a.MenuItem:visited, +#Help .navigation a.MenuItem:active { + color: #6e99c9; + text-decoration: none; +} + +#Help .navigation a.MenuItem:hover { + text-decoration: underline; +} + +#Help .forumLinks { + font-family: Sans-Serif; + border-width: 3px; + border-color: #ddd; + border-style: groove; + visibility: hidden; + display: none; + filter: alpha(opacity=93); + opacity: 0.93; + background-color: #eee; + background-image: url("/images/help_gradient.png"); + background-repeat: repeat-y; + background-position: left top; + width: 150px; + font-size: 10pt; + text-align: center; + padding: 5px; + line-height: 2em; +} + +#InboxContainer { + margin-top: 10px; +} + +#InboxContainer #InboxPane { + float: left; + position: relative; + top: -2px; + width: 700px; +} + +.InboxDateField { + text-align: right; +} + +#InboxContainer h2 { + font-family: Verdana, Sans-Serif; + font-size: 2.5em; + font-weight: normal; + letter-spacing: 0.5em; + line-height: 1em; + margin: 0 0 10px 0; + padding: 0; +} + +#InboxContainer .Ads_WideSkyscraper { + border: solid 1px #000; + float: right; + text-align: right; + width: 160px; +} + +#InboxContainer #Inbox { + border: solid 1px #000; +} + +#InboxContainer .Buttons { + margin: 10px 0; + text-align: center; +} + +#InboxContainer .InboxHeader { + background: url(/images/topNav_black.png); + border: none; + color: #fff; + font: 1.2em/normal Verdana, sans-serif; + font-weight: lighter; + letter-spacing: 0.15em; + text-align: center; +} + +#InboxContainer .InboxRow { + cursor: pointer; + font: normal 1em/normal Verdana, sans-serif; +} + +#InboxContainer .InboxRow_Unread { + cursor: pointer; + font: bold 1em/normal Verdana, sans-serif; +} + +#InboxContainer .InboxRow:hover, +#InboxContainer .InboxRow_Unread:hover, +#InboxContainer .SystemAlertMessage:hover { + background-color: #6e99c9; + color: #fff; +} + +#InboxContainer .InboxHeader a, +#InboxContainer .InboxPager a, +#InboxContainer .InboxRow:hover a, +#InboxContainer .InboxRow_Unread:hover a, +#InboxContainer .SystemAlertMessage:hover a { + color: #fff; +} + +#InboxContainer .InboxPager { + background-color: #999; + font: bold 1.2em/normal Verdana, sans-serif; + letter-spacing: 0.15em; + text-align: center; +} + +#InboxContainer .SystemAlertMessage { + cursor: pointer; + font: normal 1em/normal Verdana, sans-serif; + color: #F00; +} + +#InboxContainer .SystemAlertMessage a { + color: #F00; +} + +#InfoContainer { + background-color: #eee; + border: solid 1px #000; + color: #555; + margin: 0 auto; + width: 620px; +} + +#InfoContainer h2 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-size: x-large; + margin: 0; + text-align: center; +} + +#InfoContainer #Content { + font: normal 1em/normal Verdana, sans-serif; + line-height: 1.5em; + padding: 10px 20px 10px 20px; +} + +#AlreadyInstalled { + font-size: large; + margin: 44px 44px 44px 44px; +} + +#AlreadyInstalled a { + text-decoration: underline; +} + +#ItemContainer { + margin-top: 10px; +} + +#ItemContainer h2 { + background-color: #036; + border-bottom: solid 1px #555; + color: #fff; + font-family: Verdana, Helvetica, Sans-Serif; + font-size: x-large; + margin: 0; + text-align: center; +} + +#ItemContainer h3 { + font-size: 1.5em; + font-weight: normal; + letter-spacing: 0.15em; + line-height: 1em; + margin: 0 0 0.5em 0; + padding: 0; +} + +#ItemContainer #Item { + color: #555; + float: left; + font-family: Verdana, Sans-Serif; + width: 705px; +} + +#ItemContainer #Details { + margin: 10px; +} + +#ItemContainer #Thumbnail, +#ItemContainer #Thumbnail_Place { + border: solid 1px #eee; + padding: 0; + text-align: left; + min-width: 0; +} + +#ItemContainer #Thumbnail { + height: 420px; + width: 420px; +} + +#ItemContainer #Thumbnail_Place { + height: 230px; + width: 420px; +} + +#ItemContainer #Actions, +#ItemContainer #Actions_Place { + width: 408px; + background-color: #fff; + padding: 5px; + text-align: left; + min-width: 0; + overflow: hidden; + top: 420px; +} + +.AddRemoveFavorite { + background: url(/images/css/favoriteStar_20h.png) no-repeat 0 -20px; + margin: 0; + display: inline-block; + position: relative; + top: 3px; + *display: inline; + *zoom: 1; + padding-top: 4px; + padding-left: 25px; + width: 200px; + height: 18px; +} + +.AddRemoveFavorite:hover { + background-position: 0 0; +} + +#ItemContainer #Summary { + background-color: #fff; + border: dashed 1px #555; + display: inline; + float: right; + padding: 7px; + width: 235px; +} + +#ItemContainer #Summary #Creator { + clear: left; +} + +#ItemContainer #Summary #DescriptionLabel { + margin-bottom: 0.4em; + margin-top: 0.7em; +} + +.label { + margin-bottom: 0.5em; +} + +#ItemContainer #Summary .Description { + border: solid 1px #555; + font: normal 1em/normal Verdana, sans-serif; + max-height: 136px; + line-height: 1.5em; + padding: 4px; + overflow: auto; + text-align: left; +} + +#ItemContainer #Summary #ReportAbuse { + margin: 0 auto; + padding: 4px; + text-align: center; +} + +#ItemContainer #Summary #PublicDomainPurchase { + float: left; +} + +#ItemContainer #Summary #PublicDomainPurchase #PricePublicDomain { + color: Blue; + float: left; + font-weight: bold; + line-height: 2em; + width: 100px; +} + +#ItemContainer #Summary #PublicDomainPurchase #BuyForFree { + float: left; + line-height: 2em; + width: 100px; +} + +#ItemContainer #Summary #PublicDomainPurchase #BuyForFree .Button:hover { + background-color: #6e99c9; + border: solid 1px #000; +} + +#ItemContainer #Summary #PublicDomainPurchase #BuyForFree a:hover { + color: #fff; +} + +#ItemContainer #Summary #RobuxPurchase #PriceInRobux { + color: Green; + float: left; + font-weight: bold; + line-height: 2em; + width: 100px; +} + +#ItemContainer #Summary #RobuxPurchase #BuyWithRobux { + float: left; + line-height: 2em; + width: 100px; +} + +#ItemContainer #Summary #RobuxPurchase #BuyWithRobux .Button:hover { + background-color: #49b745; + border: solid 1px #000; +} + +#ItemContainer #Summary #RobuxPurchase #BuyWithRobux a:hover { + color: #fff; +} + +#ItemContainer #Summary #TicketsPurchase { + clear: left; +} + +#ItemContainer #Summary #TicketsPurchase #PriceInTickets { + color: #fbb117; + float: left; + font-weight: bold; + line-height: 2em; + width: 100px; +} + +#ItemContainer #Summary #TicketsPurchase #BuyWithTickets { + float: left; + line-height: 2em; + width: 100px; +} + +#ItemContainer #Summary #TicketsPurchase #BuyWithTickets .Button:hover { + background-color: #fdd017; + border: solid 1px #000; +} + +#ItemContainer #Summary #TicketsPurchase #BuyWithTickets a:hover { + color: #fff; +} + +#ItemContainer #Configuration { + background-color: #fff; + border-bottom: dashed 1px #555; + border-left: dashed 1px #555; + border-right: dashed 1px #555; + clear: right; + float: right; + margin-left: 10px; + margin-top: -10px; + padding: 5px 10px; + text-align: center; + width: 249px; +} + +.ItemVerb { + background-color: #fff; + border: dashed 1px #555; + text-align: center; + height: 20px; + margin-top: 5px; +} + +#ItemContainer .Ownership { + background-color: #ccc; + border: dashed 1px #f00; + clear: right; + color: #f00; + float: right; + margin-left: 10px; + margin-top: 0; + padding: 10px 10px; + text-align: center; + width: 230px; +} + +#ItemContainer .PlayGames { + background-color: #ccc; + border: dashed 1px Green; + color: Green; + margin-top: 10px; + padding: 10px 5px; + text-align: center; + width: 408px; +} + +#ItemContainer .BadgeStats { + width: 408px; + padding: 10px 5px; +} + +#ItemContainer .RunningGames { + background-color: #ccc; + border: dashed 1px #555; + color: #555; + margin-top: 10px; + padding: 10px 5px; + text-align: center; + width: 408px; +} + +#ItemContainer .GameInstances { + background-color: #fff; + border: solid 1px #000; + color: #555; + width: 408px; +} + +#ItemContainer .RefreshRunningGames { + margin: 10px 0; + text-align: center; +} + +#ItemContainer #Ownership .Button, +#ItemContainer .PlayGames .Button { + background-color: #fff; +} + +#ItemContainer #Ownership .Button:Hover { + background-color: #fff; + border: solid 1px #f00; + color: #f00; +} + +#ItemContainer .PlayGames .Button:Hover { + background-color: #fff; + border: solid 1px Green; + color: Green; +} + +#ItemContainer .CommentsContainer, +#ItemContainer .TabbedInfoContainer { + margin: 10px; + margin-top: 0; + width: 665px; +} + +#ItemContainer .TabbedInfoContainer h3 { + padding: 5px; +} + +#ItemContainer .CommentsContainer .HeaderPager, +#ItemContainer .CommentsContainer .FooterPager { + padding: 5px 0; + text-align: right; +} + +#ItemContainer .CommentsContainer .Comments { + border: dashed 1px #555; + overflow: hidden; + width: 663px; +} + +#ItemContainer .CommentsContainer .Comment, +#ItemContainer .CommentsContainer .AlternateComment { + padding: 7px 10px; +} + +#ItemContainer .CommentsContainer .Comment { + background-color: #fff; +} + +#ItemContainer .CommentsContainer .AlternateComment { + background-color: #eee; +} + +#ItemContainer .CommentsContainer .Commenter { + float: left; + width: 110px; +} + +#ItemContainer .CommentsContainer .Avatar { + border: solid 1px #555; + height: 100px; + width: 100px; +} + +.Avatar { + padding: 0 0 8px 0; +} + +#ItemContainer .CommentsContainer .Post { + float: left; + width: 80%; +} + +#ItemContainer .CommentsContainer .Content { + margin: 10px 0; + overflow: hidden; +} + +#ItemContainer .CommentsContainer .PostAComment { + margin: 10px 0 0 0; +} + +#ItemContainer .CommentsContainer .PostAComment .Buttons { + margin: 10px 0 0 0; +} + +#ItemContainer .CommentsContainer .MultilineTextBox, +#ItemContainer .CommentsContainer textarea { + min-height: 0; + width: 400px; +} + +#EditItem { + color: #555; + float: left; + font-family: Verdana, Sans-Serif; + margin: 0; +} + +#EditItemContainer h2 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-family: Comic Sans MS, Sans-Serif; + font-size: x-large; + margin: 0; + text-align: center; +} + +#EditItemContainer fieldset { + font-size: 1.2em; + margin: 0; + color: #000; +} + +#EditItemContainer #Confirmation { + border: dashed 1px #f00; + background-color: #ccc; + color: #f00; + margin: 0 auto; + margin-top: 10px; + padding: 10px 5px; + width: 410px; +} + +#EditItemContainer #ItemName { + margin: 0 auto; + margin-top: 10px; + padding: 0; + text-align: left; + width: 420px; +} + +#EditItemContainer #ItemThumbnail { + border: solid 1px #555; + height: 230px; + margin: 0 auto; + margin-top: 10px; + padding: 0; + text-align: left; + width: 420px; +} + +#EditItemContainer #ItemDescription { + margin: 0 auto; + margin-top: 10px; + padding: 0; + text-align: left; + width: 420px; +} + +#EditItemContainer #Comments, +#EditItemContainer #PlaceAccess, +#EditItemContainer #PlaceCopyProtection, +#EditItemContainer #AllowGear, +#EditItemContainer #SetGenres, +#EditItemContainer #VersionHistory, +#EditItemContainer #PublicDomain, +#EditItemContainer #SellThisItem, +#EditItemContainer #PlaceReset, +#EditItemContainer #PlaceBuildAccess, +.MyItemOptions { + margin: 0 auto; + margin-top: 10px; + width: 420px; +} + +#EditItemContainer #SellThisItem #Pricing { + background-color: #fff; + border: dashed 1px #000; + margin: 15px 5px 5px 5px; + padding: 5px; +} + +#EditItemContainer #SellThisItem #Price { + margin-top: 10px; +} + +#EditItemContainer #SellThisItem #Price .TextBox { + padding: 2px 4px; + width: 75px; +} + +#EditItemContainer .CopyProtectionRow, +#EditItemContainer .EnableCommentsRow, +#EditItemContainer .PlaceAccessRow, +#EditItemContainer .PublicDomainRow, +#EditItemContainer .SellThisItemRow, +#EditItemContainer .ResetPlaceRow { + font-size: 0.9em; + margin: 10px 0; + text-align: center; +} + +#EditItemContainer .PlaceAccessRow { + margin: 10px 0 10px 100px; + text-align: left; +} + +#ConfigurePlaceContainer .ResetPlaceRow .Button { + margin: 0 auto; +} + +#EditItemContainer .PricingLabel { + float: left; + font-weight: bold; + margin-right: 5px; + text-align: right; + width: 155px; +} + +#EditItemContainer .PricingField_Robux { + float: left; + margin-left: 5px; + text-align: left; + width: 110px; +} + +#EditItemContainer .PricingField_Tickets { + float: left; + margin-left: 5px; + text-align: left; + width: 110px; +} + +#EditItemContainer .Buttons { + margin: 0 auto; + margin-top: 10px; + margin-bottom: 10px; + text-align: center; +} + +#EditItemContainer .Button { + border-color: #555; + color: #555; + cursor: pointer; +} + +#EditItemContainer .Button:hover { + background-color: #6e99c9; + color: #fff; +} + +#EditItemContainer .Label { + font-size: 1.2em; + margin: 0; + padding: 0; +} + +#EditItemContainer .TextBox { + border: dashed 1px #555; + margin: 0; + padding: 5px 10px; + width: 400px; +} + +#EditItemContainer .Multiline { + border: dashed 1px #555; + margin: 0; + padding: 5px 10px; + width: 400px; +} + +#EditItemContainer .Suggestion { + font: normal 0.8em/normal Verdana, sans-serif; + padding-left: 9px; +} + +#ItemContainer .Ads_WideSkyscraper, +#EditItemContainer .Ads_WideSkyscraper { + border: solid 1px #000; + float: right; + text-align: right; + width: 160px; +} + +.GroupBuildRunningGameItem { + border: solid 2px #50F; +} + +.MultiplayerVisit { + background: url(/images/Play.png); + width: 250px; + height: 48px; +} + +.SoloVisit { + background: url(/images/PlaySolo.png); + width: 143px; + height: 48px; +} + +.SoloVisitText { + display: none; +} + +.BuildSolo { + background: url(/images/BuildSolo2.png); + width: 143px; + height: 48px; +} + +.EditButton { + background: url(/images/EditMode2.png); + width: 143px; + height: 48px; +} + +.PlaceInfoIcons { + text-align: center; + margin: 1em 5px; +} + +.iPublic { + background: url(/images/public.png); + display: inline-block; + width: 16px; + height: 16px; +} + +.iLocked { + background: url(/images/locked.png); + display: inline-block; + width: 16px; + height: 16px; +} + +.iUnlocked { + background: url(/images/unlocked.png); + display: inline-block; + width: 16px; + height: 16px; +} + +.SharedIcon { + background: url(/images/Shared.png); + display: inline-block; + width: 16px; + height: 16px; +} + +.CopyLockedIcon { + background: url(/images/CopyLocked.png); + display: inline-block; + width: 16px; + height: 16px; +} + +.AllGearIcon { + background: url(/images/Suitcase16x16.png); + display: inline-block; + width: 16px; + height: 16px; +} + +.GenreGearIcon { + background: url(/images/GenreSuitcase16x16.png); + display: inline-block; + width: 16px; + height: 16px; +} + +.NoGearIcon { + background: url(/images/NoSuitcase16x16.png); + display: inline-block; + width: 16px; + height: 16px; +} + +#BadgeStatsHeader { + width: 388px; +} + +.item-header h1 { + margin: 0; + padding: 0; + font-size: 16px; + font-style: inherit; + display: inline; +} + +.section { + padding: 8px 0 0 0; +} + +.expires-div { + margin: 16px 0 8px 0; +} + +#timer { + color: Red; + margin: 8px 0; +} + +.item-detail div, +.creator-name { + line-height: 1.5em; +} + +#assetContainer, +#placeContainer { + float: left; + width: 420px; + overflow: hidden; +} + +.updateSetsDiv { + float: right; + width: 248px; + border: 2px dashed maroon; + margin-top: 5px; +} + +.newVersionMsg { + padding: 5px 0 5px 0; + text-align: center; + color: Yellow; + background-color: Maroon; + float: right; + width: 100%; +} + +#updateSetContainer { + padding: 5px; + float: right; + width: 100%; +} + +#updateSetContainer p { + cursor: pointer; + font-size: 12px; + float: right; + width: 100%; +} + +.resaleError { + padding: 5px; + background-color: #F00; +} + +.resaleConfirmation { + padding: 5px; + background-color: #0F0; +} + +.sellCollectibleMsg { + font-family: Verdana, Helvetica, sans-serif; + font-weight: bold; + font-size: 14px; +} + +.groupBuildingGameText { + font-size: 16px; + font-weight: bold; + font-style: italic; + line-height: 24px; +} + +#ProcessPurchase_Free, +#ProcessPurchase_Robux, +#ProcessPurchase_Tickets, +#ProcessRenew_Free, +#ProcessRenew_Robux, +#ProcessRenew_Tickets, +#ProcessROBLOXPurchase { + margin: 2.5em auto; + display: none; +} + +#Processing_Free, +#Processing_Robux, +#Processing_Tickets, +#Processing_FreeRenew, +#Processing_RobuxRenew, +#Processing_TicketsRenew, +.processingMsg { + margin: 0 auto; + text-align: center; + vertical-align: middle; +} + +.createSetPanelPopup { + width: 400px; + height: 100%; + padding: 0; + float: left; + display: none; +} + +.GetAFreeAccount:hover { + background-position: 0 56px; +} + +.GetAFreeAccount { + width: 316px; + height: 56px; + background: url(/images/Buttons/getAFreeAccount.png); +} + +.PlayAsGuest:hover { + background-position: 0 56px; +} + +.PlayAsGuest { + width: 316px; + height: 56px; + background: url(/images/Buttons/playAsGuest.png); +} + +.closeBtnCircle_35h:hover { + background-position: 0 35px; +} + +.closeBtnCircle_35h { + width: 35px; + height: 35px; + background: url(/images/Buttons/closeBtnCircle_35h.png); +} + +.fblike { + display: inline-block; + float: left; + background-color: White; +} + +.LinkCountContainer { + width: 200px; + margin: 0; + padding: 5px; +} + +.LinkStatusImage { + float: left; +} + +#ManageAccountButton img, +#CancelButtonImg, +#ChangeCreditCardInfoImg { + border: none; +} + +#ManageAccountButton { + text-align: center; +} + +#GoTurboPopupPanel, +#TurnOffTurboPopupPanel { + width: 550px; + text-align: center; +} + +#CurrentAccountUpgrades { + width: 90%; + margin: auto; + text-align: center; +} + +#CurrentAccountUpgrades table { + border-collapse: collapse; + margin-bottom: 15px; + text-align: center; + background-color: #d0d6e0; + width: 225px; + margin-left: auto; + margin-right: auto; +} + +#CurrentAccountUpgrades th { + border-bottom: solid 1px #999; + text-align: center; +} + +.rightCellWall { + border: 1px solid #999; +} + +.CancelBuildersClubMembership, +.ChangeCreditCardInfo { + text-align: center; + margin-top: 5px; +} + +#BCCompareModal { + background-color: White; + border: solid 2px #6e99c9; + margin: 5px; + padding: 10px; +} + +#BuyBCComparePanelTopInfo { + text-align: center; + padding: 10px 40px 10px 40px; + width: 340px; +} + +.BuyBCComparePanelTable { + font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif; + font-size: 12px; + background: #fff; + width: 340px; + margin: 0 40px 0 40px; + border-collapse: collapse; + margin-bottom: 15px; +} + +.BCCompareHeaderRow { + color: #2163A5; + padding: 10px 8px; + border-bottom: 1px solid #D3D3D3; + text-align: left; +} + +.BuyBCComparePanelTable tr:hover td, +.BuyBCComparePanelTable tr:hover td { + color: Maroon; +} + +.BCCompareRowOdd td, +.BCCompareRowEven td { + color: #2163A5; + padding-top: 10px; + padding-left: 10px; + padding-bottom: 10px; +} + +.BCCompareRowOdd { + background: #e8edff; +} + +#BCCompareButtons { + text-align: center; + width: 340px; + margin: 0 40px 0 40px; +} + +#upgrades-membership-options .leftBorder { + border-left: 1px solid #D3D3D3; +} + +#upgrades-membership-options .odd #upgrades-membership-options .LeftText { + text-align: left; +} + +.daysConversion { + color: Red; +} + +.AspNet-Login input { + font-size: 1em; +} + +.AspNet-Login label em { + text-decoration: underline; + font-style: normal; +} + +.AspNet-Login .AspNet-Login-FailurePanel { + color: #F00; +} + +.AspNet-Login .AspNet-Login-UserPanel, +.AspNet-Login .AspNet-Login-PasswordPanel, +.AspNet-Login .AspNet-Login-RememberMePanel, +.AspNet-Login .AspNet-Login-SubmitPanel { + padding: 0.25em 0.1em 0 0; +} + +.AspNet-Login .AspNet-Login-UserPanel, +.AspNet-Login .AspNet-Login-PasswordPanel, +.AspNet-Login .AspNet-Login-SubmitPanel { + text-align: left; +} + +.AspNet-Login .AspNet-Login-UserPanel label, +.AspNet-Login .AspNet-Login-PasswordPanel label, +#PaneLogin .TextboxLabel { + font-weight: bold; +} + +.AspNet-Login .AspNet-Login-UserPanel input, +.AspNet-Login .AspNet-Login-PasswordPanel input { + width: 9em; +} + +#PaneNewUser { + float: right; + width: 170px; + background-color: #dcdcdc; + padding: 0 22px 22px; +} + +#PaneLogin { + width: 18em; + padding: 0; +} + +#PaneLogin .AspNet-Login div { + margin: 10px; +} + +#LoginView { + border: solid 1px Black; + width: 150px; + height: 250px; +} + +#LoginView h5 { + background-color: #ccc; + border-bottom: solid 1px #000; + margin: 0; +} + +#LoginView #AlreadySignedIn { + background-color: #eee; +} + +#LoginView .Label { + font-weight: bold; +} + +#LoginView .Text { + width: 133px; +} + +#LoginView .AspNet-Login { + height: 225px; + background-color: #eee; +} + +#LoginView .AspNet-Login .AspNet-Login-InstructionPanel, +#LoginView .AspNet-Login .AspNet-Login-HelpPanel, +#LoginView .AspNet-Login .AspNet-Login-UserPanel, +#LoginView .AspNet-Login .AspNet-Login-PasswordPanel, +#LoginView .AspNet-Login .AspNet-Login-RememberMePanel { + padding: 3px 5px 3px 5px; + text-align: left; +} + +#LoginView .AspNet-Login .AspNet-Login-SubmitPanel, +#LoginView .AspNet-Login .AspNet-Create-Account { + padding: 10px 5px 5px 10px; + text-align: center; +} + +#LoginView .AspNet-Login .AspNet-Login-PasswordRecoveryPanel { + padding: 5px 5px 5px 5px; + text-align: center; +} + +#LoginView .AspNet-Login .AspNet-Login-PasswordRecoveryPanel a { + color: #999; + font: normal 9px/normal Verdana, sans-serif; + padding: 5px 5px 5px 5px; + text-align: center; +} + +#LoginView .AspNet-Login .AspNet-Login-PasswordRecoveryPanel a:hover { + color: Blue; +} + +#Sidebars { + float: right; + width: 250px; +} + +#AlreadyRegistered, +#TermsAndConditions { + background-color: #eee; + border: solid 1px #000; + color: #555; + font: normal 12px/normal Verdana, sans-serif; + margin-top: 10px; + padding: 0 20px 10px 20px; +} + +#AlreadyRegistered h3, +#TermsAndConditions h3 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-weight: bold; + margin: 0 -20px 0 -20px; + padding: 4px; + text-align: center; +} + +#TermsAndConditions { + margin-top: 20px; +} + +.Registration { + background-color: #eee; + border: solid 1px #000; + color: #555; + float: left; + margin-top: 10px; + width: 620px; +} + +.Registration h2 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-size: x-large; + margin: 0; + text-align: center; +} + +.Registration h3 { + margin: 10px 0 0 0; + text-align: center; +} + +.Registration fieldset { + font-size: 1.2em; + margin: 15px 0 0 0; +} + +.Registration .TextBox { + vertical-align: middle; + width: 150px; +} + +.Registration .Label { + vertical-align: middle; +} + +.Registration #EnterUsername, +.Registration #EnterPassword, +.Registration #EnterEmail, +.Registration #EnterAgeGroup, +.Registration #EnterChatMode { + margin: 0 auto; + width: 60%; +} + +.Registration .UsernameRow, +.Registration .PasswordRow, +.Registration .ConfirmPasswordRow, +.Registration .EmailRow { + height: 5em; + line-height: 5em; + padding: 3px; + text-align: right; +} + +.Registration .PasswordRow, +.Registration .ConfirmPasswordRow { + height: 3em; + line-height: 3em; +} + +.Registration .AgeGroupRow, +.Registration .ChatModeRow { + font-size: 0.9em; + margin: 10px 0 10px 100px; +} + +.Registration .Confirm { + margin: 20px 0 20px 0; + text-align: center; +} + +.Registration .Validators { + margin-left: 9px; +} + +.Registration .Legend { + color: Blue; + margin-left: 9px; +} + +.Registration .Suggestion { + font: normal 0.8em/normal Verdana, sans-serif; + padding-left: 9px; +} + +.Registration label { + margin-right: 5px; +} + +.Registration input { + width: 9em; +} + +.AgeOptions { + margin: 0 auto; + margin-top: 20px; + width: 490px; +} + +.AgeOptions #Under13, +.AgeOptions #Over12 { + margin: 0; + padding: 0 20px; + width: 200px; + text-align: center; +} + +.AgeOptions #ParentAccount { + margin: 0; + padding: 0 0 0 40px; + width: 400px; + text-align: center; +} + +#AgeOptions .Label { + text-align: center; +} + +.MessageContainer .MultilineTextBox { + min-height: 50px; +} + +.MessageContainer #AdsPane { + border: solid 1px #000; + float: left; + width: 160px; +} + +.MessageContainer #MessagePane { + float: left; + margin: 0 0 0 60px; + width: 650px; +} + +.MessageContainer h3 { + text-align: left; + width: 622px; +} + +.MessageContainer #MessagePane .Buttons { + width: 622px; +} + +.MessageContainer #MessagePane .Buttons .Button { + margin: 10px 0 0 10px; +} + +.MessageContainer .Label { + font-weight: bold; + padding: 6px 0 3px 0; +} + +.MessageContainer .MessageReaderContainer { + border: solid 1px #000; + padding: 10px; + width: 95%; +} + +.MessageReaderContainer #Message { + text-align: left; +} + +#Message #DateSent { + text-align: left; +} + +#Message #Author { + margin: 0; + text-align: left; +} + +#Message #Subject { + display: inline-block; + *display: inline; + font-weight: bold; + margin: 0; + text-align: center; + width: 350px; + *zoom: 1; +} + +#Message .Body { + text-align: left; + vertical-align: top; +} + +#MessageEditorContainer { + border: solid 1px #000; + padding: 10px; + width: 95%; +} + +.EmptyInbox { + text-align: center; + margin: 20px 0; +} + +.MessageEditor { + text-align: left; +} + +.MessageEditor #From { + text-align: left; + width: 39%; +} + +.MessageEditor #To { + margin: 5px 0 0 0; + text-align: left; + width: 39%; +} + +.MessageEditor .CannedResponsesPanel { + background-color: #eee; + border: solid 1px #000; + margin: 30px 0; + width: 200px; +} + +.MessageEditor .CannedResponsesPanel h4 { + background-color: #ccc; + border-bottom: solid 1px #000; + font-size: 1.3em; + margin: 0; + text-align: center; + display: block; +} + +.MessageEditor #CannedResponses { + margin: 0; + padding: 5px 0; + width: 200px; +} + +.MessageEditor .CannedResponse { + margin: 0; + padding: 7px 5px; + text-align: center; + width: 190px; +} + +.MessageEditor #CannedResponses .Button { + padding: 3px 5px; +} + +.MessageEditor .Body { + text-align: left; + vertical-align: top; +} + +.MessageContainer #Confirmation h3 { + text-align: left; + width: 422px; +} + +.MessageContainer #Confirmation .Buttons { + width: 422px; +} + +.MessageContainer #Confirmation #Message { + border: solid 1px #000; + padding: 10px; + width: 95%; +} + +#InvitationContainer #AdsPane { + border: solid 1px #000; + float: left; + width: 160px; +} + +#InvitationContainer #InvitationPane { + float: left; + margin: 0 0 0 60px; + width: 650px; +} + +#InvitationContainer h3 { + text-align: left; + width: 622px; +} + +#InvitationContainer .Buttons { + width: 622px; +} + +#InvitationContainer .Button { + float: right; + font-family: Verdana, Sans-Serif; + padding: 3px 10px 3px 10px; + text-decoration: none; +} + +#InvitationContainer .TextBox { + border-color: Gray; + border-style: dashed; + padding: 5px; + width: 98%; +} + +#InvitationContainer .Label { + font-weight: bold; +} + +#InvitationContainer .MessageReaderContainer { + border-style: solid; + border-width: 1px; + border-color: #000; + padding: 10px; + width: 95%; +} + +.MessageReaderContainer #Message { + float: left; + text-align: left; +} + +#InvitationContainer #MessageEditorContainer .MessageEditor .CannedResponsesPanel { + display: none; +} + +#InvitationContainer #Confirmation h3 { + text-align: left; + width: 422px; +} + +#InvitationContainer #Confirmation .Buttons { + width: 422px; +} + +#InvitationContainer #Confirmation #Message { + border: solid 1px #000; + margin: 10px; + padding: 10px; + width: 95%; +} + +.ReportAbuse { + position: relative; + text-align: left; +} + +.ReportAbuse .AbuseButton a { + color: #F99; + background: none; + padding-left: 16px; + padding-bottom: 2px; +} + +.ReportAbuse .AbuseButton a:hover { + background: url("/images/css/abuse.png") no-repeat scroll 0 2px transparent; + color: #F00; +} + +.ReportAbuse img { + display: none; +} + +#ParentsContainer #BreadcrumbsContainer { + margin-bottom: 20px; +} + +#ParentsContainer h2 { + font-family: Verdana, Sans-Serif; + font-size: 2.5em; + font-weight: normal; + line-height: 1em; + margin: 0 0 20px 0; +} + +#ParentsContainer #LeftColumn { + float: left; + padding: 0 15px 0 0; + width: 400px; +} + +#ParentsContainer #RightColumn { + float: right; + padding: 0 0 0 15px; + width: 400px; +} + +#ParentsContainer .ParentsSection { + background-color: #fff; + border: solid 1px #ccc; + height: 120px; + margin-bottom: 20px; + padding: 15px 15px; + width: 370px; +} + +#ParentsContainer h3, +dt { + color: Blue; + font-family: Verdana, Sans-Serif; + font-size: 1.3em; + font-weight: normal; + letter-spacing: 0.1em; + line-height: 1em; +} + +#ParentsContainer .SectionIcon { + float: left; + margin-right: 20px; +} + +#ParentsContainer .PageImage { + float: right; +} + +#partycontainer { + bottom: 110px; + right: 10px; +} + +.partyWindow { + color: #666; + font-family: Verdana, Geneva, sans-serif; + font-size: 11px; + width: 250px; +} + +.partyWindow .title { + background: transparent url("/images/friendsbar/tab_blue19h_l.gif") no-repeat left top; + display: block; + text-decoration: none; + padding-left: 2px; + height: 19px; + width: 248px; + cursor: pointer; +} + +.partyWindow .title span { + background: transparent url("/images/friendsbar/tab_blue19h_r.gif") no-repeat right top; + display: block; + height: 15px; + padding: 2px 15px 2px 7px; + text-decoration: none; + color: #fff; +} + +.partyWindow .title_flash { + background: transparent url("/images/friendsbar/tab_white19h_l2.gif") no-repeat left top; +} + +.partyWindow .title_flash span { + background: transparent url("/images/friendsbar/tab_white19h_r2.gif") no-repeat right top; + color: #444; +} + +.partyWindow .title strong { + display: block; + padding: 2px 15px 4px 6px; + background: url("/images/chat/tab_blue21h_r.png") no-repeat right top; + color: #fff; + width: 227px; + font-weight: bold; +} + +.partyWindow .closeparty { + width: 10px; + height: 9px; + margin: 5px 9px 0 0; + cursor: pointer; + position: absolute; + right: 0; + top: 0; + color: #fff; + font-weight: bold; + font-size: 14px; +} + +.partyWindow .main { + clear: both; + width: 248px; + height: auto; + margin: 0; + background: #f2f2f2; + border: 1px solid #a6a6a6; + border-top: 0 none; + overflow: auto; +} + +.partyWindow .kickuser { + float: right; + padding-right: 5px; + color: Red; + cursor: pointer; +} + +#new_party p { + text-align: center; + padding: 40px 0 0 0; +} + +#party_none .main .btn_green21h { + margin: 15px 0 0 77px; +} + +.clear { + clear: both; +} + +.main #new_party_clear { + padding: 40px 0 0 0; +} + +.btn_green21h { + float: left; + background: url("/images/chat/btn_green21h_l.png") no-repeat left top; + padding: 0 0 0 2px; +} + +.btn_green21h a { + display: block; + padding: 2px 14px 4px 10px; + background: url("/images/chat/btn_green21h_r.png") no-repeat right top; + color: White; + font-family: verdana; + font-weight: bold; + text-decoration: none; +} + +.btn_green21h:hover { + background: url("/images/chat/btn_green21h_over_l.png") no-repeat left top; +} + +.btn_green21h:hover a { + background: url("/images/chat/btn_green21h_over_r.png") no-repeat right top; +} + +.btn_red21h { + float: left; + background: url("/images/chat/btn_red21h_l.png") no-repeat left top; + padding: 0 0 0 2px; +} + +.btn_red21h a { + display: block; + padding: 2px 14px 4px 10px; + background: url("/images/chat/btn_red21h_r.png") no-repeat right top; + color: White; + font-family: verdana; + font-weight: bold; + text-decoration: none; +} + +.btn_red21h:hover { + background: url("/images/chat/btn_red21h_over_l.png") no-repeat left top; +} + +.btn_red21h:hover a { + background: url("/images/chat/btn_red21h_over_r.png") no-repeat right top; +} + +.btn_black21h { + float: left; + background: url("/images/chat/btn_black21h_l.png") no-repeat left top; + padding: 0 0 0 2px; + color: White; +} + +.btn_black21h a { + display: block; + padding: 2px 14px 4px 10px; + background: url("/images/chat/btn_black21h_r.png") no-repeat right top; + color: #FFF; + font-family: verdana; + font-weight: bold; + text-decoration: none; +} + +.btn_black21h:hover { + background: url("/images/chat/btn_black21h_over_l.png") no-repeat left top; +} + +.btn_black21h:hover a { + background: url("/images/chat/btn_black21h_over_r.png") no-repeat right top; +} + +.main h1 { + padding: 15px 20px 15px 20px; + font-size: 130%; + text-align: center; +} + +.main #invite_status { + padding: 10px 0 10px 0; +} + +.main p { + padding: 0 0 7px 0; +} + +.main .btn_green21h { + float: left; + margin: 0 0 0 35px; +} + +.main .btn_black21h { + float: right; + margin: 0 35px 0 0; +} + +.main #invite_clear { + padding: 15px 0 0 0; +} + +dt { + float: left; +} + +dd { + margin-left: 30px; +} + +.grey9 { + color: gray; + font-size: 9px; +} + +.status { + color: gray; + font-size: 11px; +} + +.name_me { + font-weight: bold; + color: #06c; +} + +.name_other { + font-weight: bold; + color: #007b00; +} + +.name_status { + font-weight: bold; +} + +.partyWindow { + color: black; + font-size: 11px; + height: auto; +} + +.members dl { + padding: 0 0 0 5px; +} + +.members dt { + padding: 4px 0 0 0; +} + +.members dd { + padding: 4px 0 1px 0; +} + +.main p { + padding: 10px 0 5px 0; + text-align: center; +} + +#chat_messages { + padding: 0 3px 3px 3px; + margin: 5px 5px 0 5px; + height: 217px; + overflow: auto; + background-color: white; + border-style: solid; + border-width: 1px; + border-color: #aaa; +} + +#chat_messages li { + padding: 6px 0 0 0; + list-style-type: none; +} + +#party_game_thumb { + width: 75px; + margin-right: 5px; + float: left; +} + +#party_current_game { + margin: 5px; +} + +#party_game_name { + width: 140px; + float: left; +} + +#party_game_follow_me { + margin-top: 5px; +} + +#chat_input { + margin: 5px 5px 0 5px; + padding-right: 2px; +} + +#chat_input input { + border: 1px solid #ccc; + width: 236px; + height: 40px; +} + +#chat_input textarea { + border: 1px solid #aaa; + overflow: auto; + width: 100%; + height: 50px; +} + +.main #leader_clear { + padding: 15px 0 0 0; +} + +#party_my .main .btn_black21h { + margin: 15px 70px 0 0; +} + +.GuestPlayAvatarImage { + border: solid 3px green; +} + +.GuestPlayAvatarImage:Hover { + border: solid 3px #0C0; +} + +#ConfigurePlaceContainer { + background-color: #eee; + border: solid 1px #000; + color: #555; + margin: 0 auto; + width: 620px; +} + +#ConfigurePlaceContainer h2 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-size: x-large; + margin: 0; + text-align: center; +} + +#ConfigurePlaceContainer fieldset { + font-size: 1.2em; + margin: 0; +} + +#ConfigurePlaceContainer #PlaceName { + margin: 0 auto; + margin-top: 10px; + padding: 0; + text-align: left; + width: 420px; +} + +#ConfigurePlaceContainer #PlaceThumbnail { + border: solid 1px #555; + height: 230px; + margin: 0 auto; + margin-top: 10px; + padding: 0; + text-align: left; + width: 420px; +} + +#ConfigurePlaceContainer #PlaceDescription { + margin: 0 auto; + margin-top: 10px; + padding: 0; + text-align: left; + width: 420px; +} + +#ConfigurePlaceContainer #PlaceAccess, +#ConfigurePlaceContainer #PlaceCopyProtection, +#ConfigurePlaceContainer #Comments, +#ConfigurePlaceContainer #PlaceIsDefault, +#ConfigurePlaceContainer #PlaceReset, +#ConfigurePlaceContainer #AllowGear, +#ConfigurePlaceContainer #SetGenres, +#ConfigurePlaceContainer #PlaceBuildAccess { + margin: 0 auto; + margin-top: 10px; + width: 420px; +} + +#ConfigurePlaceContainer .PlaceAccessRow, +#ConfigurePlaceContainer .CopyProtectionRow, +#ConfigurePlaceContainer .EnableCommentsRow, +#ConfigurePlaceContainer .PlaceIsDefaultRow, +.MyItemIndentedOption { + font-size: 0.9em; + margin: 10px 0 10px 100px; +} + +#ConfigurePlaceContainer .ResetPlaceRow { + font-size: 0.9em; + margin: 10px 0; + text-align: center; +} + +#ConfigurePlaceContainer .ResetPlaceRow .Button { + margin: 0 auto; +} + +#ConfigurePlaceContainer .Buttons { + margin: 0 auto; + margin-top: 10px; + margin-bottom: 10px; + text-align: center; +} + +#ConfigurePlaceContainer .Button { + border-color: #555; + color: #555; + cursor: pointer; +} + +#ConfigurePlaceContainer .Button:hover { + background-color: #6e99c9; + color: #fff; +} + +#ConfigurePlaceContainer .Label { + font-size: 1.2em; + margin: 0; + padding: 0; +} + +#ConfigurePlaceContainer .TextBox { + border: dashed 1px #555; + margin: 0; + padding: 5px 10px; + width: 400px; +} + +#ConfigurePlaceContainer .MultilineTextBox { + border: dashed 1px #555; + margin: 0; + padding: 5px 10px; + width: 400px; +} + +#ConfigurePlaceContainer .Suggestion { + font: normal 0.8em/normal Verdana, sans-serif; + padding-left: 9px; +} + +#ConfigurePlaceContainer .popupControl { + border-color: #000; +} + +#ConfigurePlaceContainer .PopUpOption { + font: normal 0.8em/normal Verdana, sans-serif; + padding: 4px; +} + +#ConfigurePlaceContainer .PopUpInstruction { + font: normal 1.1em/normal Verdana, sans-serif; + padding: 4px; + text-align: center; +} + +#Place_PlacePanel { + float: left; + width: 490px; + margin-right: 10px; +} + +#Place_AuthorPanel { + float: left; + width: 200px; +} + +#Place_GamesPanel { + margin-top: 10px; + width: 700px; + clear: left; +} + +#ConfigureShowcase { + font-family: Verdana, sans-serif; +} + +#ConfigureShowcase h2 { + font-size: 2.5em; + font-weight: normal; + line-height: 1em; + margin: 0; + padding: 0; +} + +#ConfigureShowcase .CallbackStyle { + border: thin blue inset; +} + +#ConfigureShowcase .DragHandle { + width: 161px; + height: 101px; + cursor: move; + border: outset 1px white; +} + +#ConfigureShowcase .ItemArea { + float: left; + font-size: 1.2em; + height: 82px; + padding: 10px; + text-align: left; + width: 500px; +} + +#ConfigureShowcase .ActionsArea { + float: left; + font-weight: bold; + height: 82px; + padding: 10px; + text-align: right; + width: 155px; +} + +#ConfigureShowcase .ReorderCue { + border: dashed thin black; + width: 100%; + height: 101px; +} + +#ConfigureShowcase ul, +#ConfigureShowcase ol { + margin: 0; +} + +#ConfigureShowcase li { + background: #EEE; + border: solid 1px #000; + color: #000; + list-style: none; + margin: 3px 0; + width: 100%; +} + +#ConfigureShowcase blockquote li { + border-style: none; + list-style-type: circle; + margin-left: 20px; +} + +.PlaceLauncherStatus { + color: #333; + display: none; + font-size: 16px; + font-weight: bolder; + line-height: 19px; +} + +.PlaceLauncherStatusBackBuffer { + position: relative; + display: none; +} + +.CancelPlaceLauncherButton { + background-color: White; + border: none; + color: Blue; + cursor: pointer; + font-size: 12px; +} + +.CancelPlaceLauncherButton:Hover, +.CancelPlaceLauncherButton:Active { + background-color: White; + border: none; + color: Blue; + cursor: pointer; + text-decoration: underline; +} + +.PlaceLauncherModal { + border: none; + color: Black; + height: 125px; + margin: 1.5em; + padding: 10px; + text-align: center; + width: 360px; +} + +#FeaturedGameButtonContainer { + border: none; + width: 330px; + height: 267px; +} + +.FeaturedGameButton { + cursor: pointer; + position: absolute; + right: 60px; + top: 28px; +} + +.VisitButtonsGuestCharacter { + display: inline-block; + *display: inline; + padding: 10px 5px; +} + +legend span { + color: #777; + line-height: 6px; +} + +#EditProfileContainer { + background-color: #eee; + border: solid 1px #000; + color: #555; + margin: 0 auto; + width: 620px; +} + +#EditProfileContainer h2 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-size: x-large; + margin: 0; + text-align: center; +} + +#EditProfileContainer h3 { + text-align: center; +} + +#EditProfileContainer fieldset { + font-size: 1.2em; + margin: 15px 0 0 0; +} + +#EditProfileContainer .MultilineTextBox { + width: 250px; +} + +#EditProfileContainer .TextBox { + vertical-align: middle; + width: 150px; +} + +#EditProfileContainer .Label { + vertical-align: middle; +} + +#EditProfileContainer #Confirmation { + border: dashed 1px #f00; + background-color: #ccc; + color: #f00; + font-family: Verdana, Sans-Serif; + margin: 0 auto; + margin-top: 10px; + padding: 10px 5px; + text-align: center; + width: 410px; +} + +#EditProfileContainer #AgeGroup, +#EditProfileContainer #ChatMode, +#EditProfileContainer #PrivacyMode, +#EditProfileContainer #ResetPassword, +#EditProfileContainer #Blurb { + margin: 0 auto; + width: 60%; +} + +#EditProfileContainer #EnterEmail { + margin: 0 auto; + width: 60%; + text-align: left; +} + +#EditProfileContainer .Buttons { + margin: 20px 0 20px 0; + text-align: center; +} + +#EditProfileContainer .AgeGroupRow, +#EditProfileContainer .ChatModeRow { + font-size: 0.9em; + margin: 10px 0 10px 100px; +} + +#EditProfileContainer .ResetPasswordRow { + margin: 10px 0; + text-align: center; +} + +#EditProfileContainer .BlurbRow { + padding: 10px 4px 10px 4px; + text-align: right; +} + +#EditProfileContainer .Legend { + color: Blue; + margin-left: 9px; +} + +#EditProfileContainer .Suggestion { + font: normal 0.8em/normal Verdana, sans-serif; + padding-left: 9px; +} + +#EditProfileContainer .Validators { + margin-left: 9px; +} + +.FrontPagePanel { + float: left; + border: solid 1px black; + margin: 5px; + background-color: White; +} + +#SignInPane { + border: none; + margin-left: 0; + width: 152px; + height: 250px; +} + +#Movie { + width: 424px; + height: 250px; +} + +#FrontPageRectangleAd { + margin: 5px 0 5px 5px; + width: 300px; + height: 250px; + background-color: Transparent; +} + +#SalesPitch { + margin-left: 0; + width: 586px; + height: 90px; +} + +#WhatsNew { + margin-left: 0; + width: 586px; + height: 280px; +} + +#RandomFacts { + float: right; + margin-right: 0; + width: 300px; + height: 150px; +} + +.RandomFactoid { + text-align: center; + height: 32px; + width: 290px; + padding: 2px; + overflow: hidden; +} + +#marqueecontainer { + position: relative; + width: 300px; + height: 100px; + background-color: white; + overflow: hidden; +} + +.RandomFactoid img { + float: left; +} + +#ParentsCorner { + margin-right: 0; + width: 300px; + height: 220px; + _height: 240px; +} + +#ParentsCorner #Inside { + padding: 10px; +} + +.ShieldImage { + float: left; + padding: 5px; +} + +.TrusteeSeal { + float: left; + width: 140px; + padding: 5px; +} + +#NewsFeeder { + margin-right: 0; + width: 158px; +} + +#FrontPageBannerAd { + margin-left: 0; + width: 728px; + height: 90px; + background-color: Transparent; +} + +.BadAdButton { + background-color: Transparent; + border: 0; + font-size: 0.8em; + font-family: Verdana; + padding: 0; + position: relative; + text-align: center; + height: 8px; + top: -2px; + right: 0; +} + +.BadAdButton:hover { + background-color: #fff; + border: solid 1px #000; + text-decoration: none; +} + +.Centered { + margin-left: auto; + margin-right: auto; +} + +.ShadowedStandardBox { + position: relative; + z-index: 0; + _padding-bottom: 6px; + _overflow-y: hidden; + margin-bottom: 10px; +} + +.ShadowedStandardBox .Header { + background: url(/images/HeaderGradientW800.png) repeat-y top left; + text-align: center; + color: White; + height: 20px; + line-height: 20px; + font-size: 15px; + font-weight: bold; + display: block; + position: relative; + z-index: 0; + white-space: nowrap; +} + +.ShadowedStandardBox .Content { + position: relative; + z-index: 0; + border: 2px solid #6e99c9; + background-color: White; + height: 100%; + _height: 3000px; + padding: 10px 10px 10px 10px; +} + +.Shadow { + display: block; + background: url(/images/ShadowAlpha.png) no-repeat bottom right !important; + background: #D3DEFF; + height: 100%; + _height: 3000px; + width: 100%; + position: absolute; + top: 6px; + left: 6px; + z-index: -1; +} + +.ShadowedStandardBox .Button { + cursor: pointer; + background-color: #B6CCE4; + color: #435D77; + text-decoration: none; + border: solid 1px #ccc; + padding: 3px 10px 3px 10px; + font-family: Verdana; + font-size: 10px; + font-weight: bold; + text-align: center; + white-space: nowrap; +} + +.ShadowedStandardBox .Button:link, +.ShadowedStandardBox .Button:visited { + background-color: #B6CCE4; + color: #435D77; + text-decoration: none; +} + +.ShadowedStandardBox .Button:hover, +.ShadowedStandardBox .Button:active { + background-color: #5F84A8; + color: White; + text-decoration: none; +} + +.OutlineBox { + z-index: 0; + position: relative; + margin-top: 16px; + padding-top: 14px; + margin-bottom: 10px; + border: solid 2px #B6CCE4; +} + +.OutlineBox .OB_HeaderPositioner { + z-index: 1; + position: absolute; + top: -16px; + left: 0; + width: 100%; +} + +.OutlineBox .OB_Header { + z-index: 1; + display: block; + width: 90%; + margin-left: auto; + margin-right: auto; + background-color: White; + border: solid 2px #B6CCE4; + text-align: center; + font-size: 18px; + font-weight: bold; + padding: 2px 2px 2px 2px; +} + +.OutlineBox .OB_Content { + padding-top: 5px; +} + +#InviteAFriendContainer { + margin-top: 10px; +} + +#InviteAFriendContainer h3 { + margin: 0 auto; + padding: 0 0 10px 0; + text-align: left; + width: 700px; +} + +#InviteAFriendContainer #Exposition { + margin: 0 auto; + padding: 0 0 10px 0; + width: 700px; +} + +#InviteAFriendContainer .Button { + border: solid 1px #000; + color: #000; + font-family: Verdana, Sans-Serif; + margin: 0 0 0 10px; + padding: 3px 10px 3px 10px; + text-decoration: none; +} + +#InviteAFriendContainer .MultilineTextBox { + border: 2px solid #CCC; + font-family: Arial, Sans-Serif; + line-height: 1.5em; + padding: 5px 5px 5px 5px; + width: 92%; +} + +#InviteAFriendContainer .TextBox { + border: 2px solid #CCC; + font-family: Arial, Sans-Serif; + padding: 5px 5px 5px 5px; + width: 92%; +} + +#InviteAFriendContainer .Label { + font-weight: bold; +} + +#InviteAFriendContainer #InvitationElements { + margin: 0 auto; + padding: 5px 5px 5px 5px; + width: 688px; +} + +#InviteAFriendContainer #Name, +#InviteAFriendContainer #Recipients, +#InviteAFriendContainer #Message { + margin: 15px 0 0 0; +} + +#InviteAFriendContainer .FormLabel { + float: left; + width: 94px; +} + +#InviteAFriendContainer .FormField { + float: left; + width: 317px; +} + +#InviteAFriendContainer .FormNotes { + float: right; + font-family: Verdana; + font-size: xx-small; + width: 277px; + text-align: left; +} + +#InviteAFriendContainer #Confirmation h3 { + margin: 0 auto; + text-align: left; + width: 400px; +} + +#InviteAFriendContainer #Confirmation #Message { + border: solid 1px #000; + margin: 0 auto; + padding: 10px 10px 10px 10px; + width: 380px; +} + +#InviteAFriendContainer #Confirmation .Buttons { + margin: 0 auto; + width: 400px; +} + +#ShareRobloxRibbon { + margin: 15px 0; + padding: 3px; + text-align: center; +} + +#ShareRobloxRibbon a { + text-decoration: none; + color: #000; +} + +.ShareRobloxButton { + padding: 4px; + margin: 4px 6px; + border: 3px solid #B2C1D2; + background: #A5D0FF; + color: #000; + cursor: pointer; + font-size: 16px; +} + +.ShareRobloxButtonCurrent { + padding: 4px; + margin: 4px 6px; + border: 3px solid #B2C1D2; + background: #527396; + color: #FFF; + cursor: pointer; + font-size: 16px; + text-decoration: none; +} + +.ShareRobloxButton:hover { + background: #527396; + color: #FFF; +} + +.clearing { + clear: both; +} + +#PleaseUpgradeMeContainer { + margin-top: 10px; +} + +#StoreContainer { + font-family: Verdana, Sans-Serif; +} + +#StoreContainer h2 { + font-family: Verdana, Sans-Serif; + font-size: 2.5em; + font-weight: normal; + letter-spacing: 0.5em; + line-height: 1em; + margin: 0; + padding: 0; +} + +#StoreContainer h3 { + font-family: Verdana, Sans-Serif; + font-size: 1.5em; + font-weight: normal; + letter-spacing: 0.1em; + line-height: 1em; + margin: 5px 0; + padding: 0; +} + +#StoreContainer ul { + list-style: none; + margin: 10px 0 30px 0; +} + +#StoreContainer ul li { + margin-bottom: 0.5em; +} + +#StoreContainer ul a { + font-size: 1.1em; +} + +#StoreContainer .DisplayFilters { + width: 150px; +} + +#StoreContainer #Products { + float: left; + padding-bottom: 10px; + padding-left: 0; + padding-right: 0; + width: 585px; +} + +#StoreContainer #Products #HeaderPager, +#StoreContainer #Products #FooterPager { + margin: 0 24px 0 10px; + padding: 2px 0; + text-align: right; +} + +#StoreContainer #Products #HeaderPager { + margin-bottom: 10px; +} + +#StoreContainer #Products #HeaderPager .Label, +#StoreContainer #Products #FooterPager .Label { + font-size: 1em; + vertical-align: middle; +} + +#StoreContainer #Products #AdditionalPlace { + margin: 0 auto; + width: 420px; +} + +#StoreContainer #AdsPane { + border: solid 1px #000; + float: right; + text-align: right; + width: 160px; +} + +#StoreContainer .Label, +#StoreContainer .Detail, +#StoreContainer .DetailHighlighted { + font-size: 0.8em; +} + +#StoreContainer .DetailHighlighted { + color: Red; + font-weight: bold; +} + +#StoreContainer .Thumbnail { + border: solid 1px #000; + height: 230px; + width: 420px; +} + +#StoreContainer .Price { + font-weight: bold; + margin: 5px 0; +} + +#StoreContainer .InsufficientFunds { + color: Red; +} + +.tipsy { + padding: 5px; + font-size: 10px; + opacity: 0.8; + filter: alpha(opacity=80); + background-repeat: no-repeat; + background-image: url(/images/css/tipsy.gif); +} + +.tipsy-inner { + padding: 5px 8px 4px 8px; + background-color: black; + color: white; + max-width: 200px; + text-align: center; +} + +.tipsy-inner { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} + +.tipsy-north { + background-position: top center; +} + +.tipsy-south { + background-position: bottom center; +} + +.tipsy-east { + background-position: right center; +} + +.tipsy-west { + background-position: left center; +} + +#CancelBuildersClubContainer, +#PaymentMethodsContainer, +#PaymentContainer, +#PayPalContainer, +#CashContainer { + background-color: #fff; + font-family: Arial, Sans-Serif; + margin: 0 auto; + padding: 20px 80px; +} + +#UpgradeCompleteContainer, +#CancelAccountUpgradeContainer, +#ManageAccountUpgradesContainer, +#AccountUpgradesConfirmationContainer { + background-color: #fff; + font-family: Arial, Sans-Serif; + margin: 0 auto; +} + +#AccountUpgradesConfirmationContainer, +#CancelAccountUpgradeContainer { + border: solid 2px #6e99c9; + padding: 10px 10px 20px 10px; +} + +#CancelBuildersClubContainer h2, +#PaymentMethodsContainer h2, +#PaymentContainer h2, +#PayPalContainer h2, +#CashContainer h2, +#UpgradeCompleteContainer h2, +#ManageAccountUpgradesContainer h2, +#CancelAccountUpgradeContainer h2, +#AccountUpgradesConfirmationContainer h2 { + font-family: Arial, Sans-Serif; + font-size: 2.5em; + font-weight: normal; + line-height: 1em; + margin: 0; + padding: 0; +} + +#UpgradeCompleteContainer h2, +#CancelAccountUpgradeContainer h2, +#ManageAccountUpgradesContainer h2, +#AccountUpgradesConfirmationContainer h2 { + font-size: 2em; + letter-spacing: 0.1em; + line-height: 1.5em; + margin: 0 auto; + margin-top: 10px; + width: 600px; +} + +#UpgradeCompleteContainer p, +#ManageAccountUpgradesContainer p, +#AccountUpgradesConfirmationContainer p { + line-height: 1.6em; +} + +#RobloxCentralBank { + border-bottom: solid 1px #000; +} + +#MembershipOptions .Label, +#SpecialMembershipOption .Label { + text-align: center; +} + +#WhyJoin { + display: inline; + float: left; + margin: 30px 10px 20px 90px; + padding: 0; + width: 375px; +} + +#WhyJoin h3 { + font-size: 15pt; + font-weight: normal; + letter-spacing: 0.2em; + margin: 0 0 15px 0; + padding: 0; +} + +#WhyJoin #MembershipBenefits { + list-style: none; + margin: 0; + padding: 0; +} + +#WhyJoin #MembershipBenefits li { + background-position: 0 0; + background-repeat: no-repeat; + font-family: Arial, Sans-Serif; + font-size: 11pt; + margin: 0 0 10px 10px; + min-height: 32px; + padding: 0 0 0 40px; +} + +#WhyJoin .MembershipBenefits { + list-style: none; + margin: 0; + padding: 0; +} + +#WhyJoin .MembershipBenefits li { + background-position: 0 0; + background-repeat: no-repeat; + font-family: Arial, Sans-Serif; + font-size: 11pt; + margin: 0 0 10px 10px; + min-height: 32px; + padding: 0 0 0 40px; +} + +#WhyJoin .MembershipBenefits .Benefit_MultiplePlaces { + background-image: url(/images/MultiplePlacesBullet.png); +} + +#WhyJoin .MembershipBenefits .Benefit_RobuxAllowance { + background-image: url(/images/AllowanceBullet.png); +} + +#WhyJoin .MembershipBenefits .Benefit_SellContent { + background-image: url(/images/SellBullet.png); +} + +#WhyJoin .MembershipBenefits .Benefit_SuppressAds { + background-image: url(/images/AdSuppressionBullet.png); +} + +#WhyJoin .MembershipBenefits .Benefit_ExclusiveHat { + background-image: url(/images/HardHatBullet.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_OwnPlace { + background-image: url(/images/JoinBulletHouse.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_GetTix { + background-image: url(/images/JoinBulletTreasure.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_BuyStuff { + background-image: url(/images/JoinBulletShoppingBag.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_CustomizeGuy { + background-image: url(/images/JoinBulletWizardHat.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_Username { + background-image: url(/images/JoinBulletStar.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_Forums { + background-image: url(/images/JoinBulletScript.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_Stats { + background-image: url(/images/JoinBulletStats.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_Comments { + background-image: url(/images/JoinBulletPencil.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_Badges { + background-image: url(/images/JoinBulletBadges.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_Friends { + background-image: url(/images/JoinBulletFriends.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_WeRock { + background-image: url(/images/JoinBulletCreative.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_OhYeahItsFree { + background-image: url(/images/JoinBulletHappy.png); +} + +#SpecialMembershipOption { + display: inline; + float: right; + margin: 30px 69px 0 10px; + padding: 0; + width: 254px; +} + +#PaymentMethodsContainer .PaymentMethods { + border: none; + margin: 20px auto; + padding: 10px; + width: 600px; +} + +#PaymentMethodsHeader { + margin: 0 auto; + padding-left: 60px; + width: 600px; +} + +.PaymentMethodRow { + font-family: Arial, Helvetica, Sans-Serif; + background-color: transparent; + color: #090; +} + +.PaymentMethodRow:hover { + background-color: #f2f2f2; + cursor: pointer; + color: #00d900; +} + +.PaymentMethodRowUnavailable a { + color: #090; +} + +.PaymentMethodRow td, +.PaymentMethodRowUnavailable td { + border: none; + padding: 20px; +} + +#PaymentMethodsContainer .PaymentMethodName { + color: #333; + font-weight: bold; + font-size: medium; +} + +#Legend { + margin-top: 10px; +} + +#CurrentBalance { + color: #333; +} + +#PaymentContainer #Account, +#PaymentContainer #BillingInfo, +#PaymentContainer #ProductAndPricing, +#PaymentContainer #ProductAndPricing1, +#PaymentContainer #CreditCard, +#PayPalContainer #ConfirmDetails, +#CashContainer #ConfirmDetails, +#PayPalContainer #Notes, +#CashContainer #Notes { + margin-bottom: 20px; +} + +#PaymentContainer #Pay, +#PayPalContainer #Continue { + margin: 0 auto; + text-align: center; +} + +.PaymentDropDownList { + padding: 5px; + width: 95%; +} + +#PaymentContainer .Label, +#PayPalContainer .Label, +#CashContainer .Label { + float: left; + font-size: 1.25em; + height: 40px; + line-height: 40px; + padding: 0 10px; + vertical-align: middle; + width: 250px; +} + +#ConfirmDetails .Detail { + background-color: #EEE; + border-bottom: solid 1px #CCC; + border-top: solid 1px #CCC; + height: 40px; + line-height: 40px; +} + +#PaymentContainer .Field, +#PayPalContainer .Field, +#CashContainer .Field { + float: left; + height: 40px; + line-height: 40px; + padding: 0 10px; + vertical-align: middle; + width: 400px; +} + +#PaymentContainer .Button, +#PayPalContainer .Button { + font-size: 16px; + margin: 0 3px; +} + +#PaymentMethodsContainer .ExistingSubscription { + font-size: 16px; + color: Blue; + width: 50%; + text-align: center; +} + +#PayPalContainer .PayPalDisallowedMessage { + font-size: 16px; + padding-bottom: 12px; + color: Blue; + width: 90%; +} + +#ProductAndPricing, +#ProductAndPricing1 { + float: left; + width: 865px; +} + +#ProductAndPricing .TotalRowName, +#ProductAndPricing .TotalRowPrice { + font-size: 14px; + font-weight: bold; + padding-top: 10px; +} + +.TotalRowName, +.TotalRowPrice, +.ProductName, +.SuperchargeProductName, +.ProductPrice, +.SuperchargeProductPrice { + float: left; + font-weight: bold; +} + +.ProductName, +.TotalRowName, +.SuperchargeProductName { + width: 600px; +} + +.ProductPrice, +.TotalRowPrice, +.SuperchargeProductPrice { + width: 200px; +} + +.SuperchargeProductName, +.SuperchargeProductPrice { + color: #E6B800; +} + +#PaymentDetails #Account .Field, +#PaymentDetails #ProductAndPricing .Field, +#PayPalContainer #ConfirmDetails .Field, +#CashContainer #ConfirmDetails .Field { + font-size: 1.25em; + font-weight: bold; +} + +#PaymentDetailsTable { + width: 400px; +} + +#UpgradeCompleteContainer #Message, +#CancelAccountUpgradeContainer #Message, +#ManageAccountUpgradesContainer #CurrentAccountUpgrades, +#AccountUpgradesConfirmationContainer #Message { + background-color: #eee; + border: solid 1px #ccc; + margin: 0 auto; + margin-top: 15px; + padding: 10px; + width: 580px; +} + +#ManageAccountUpgradesContainer #CurrentAccountUpgrades { + margin-top: 25px; + font-family: Arial, Helvetica, Sans-Serif; +} + +.ExtensionNote { + margin: 10px 0; +} + +.UpgradeStatus { + font-weight: bold; + margin: 20px; + text-align: center; +} + +#BuildersClubContainer { + font-family: Arial, Sans-Serif; + margin: 0 auto; + width: 900px; +} + +#BuildersClubContainer #LeftColumn { + background-color: #fff; + width: 575px; + float: left; + margin-top: 10px; +} + +#BuildersClubContainer #LeftColumn #MembershipOptions { + margin-bottom: 50px; + padding: 10px 10px 0 10px; +} + +#BuildersClubContainer #LeftColumn #MembershipOptions .MembershipButton { + margin: 0 4px 0 4px; + float: left; + width: 130px; +} + +#BuildersClubContainer #LeftColumn #MembershipOptions .BCButtonLabel { + color: #6e99c9; + margin-top: 4px; + text-align: center; +} + +#BuildersClubContainer #LeftColumn h1 { + font-size: 20px; + color: #6e99c9; + font-style: italic; + font-weight: bold; +} + +#MembershipOptionsTable { + width: 500px; + margin: auto; +} + +#MembershipOptionsTable tr { + text-align: center; +} + +#MembershipOptionsTable td { + width: 100px; + margin: 38px; +} + +#MembershipOptionsTable td .BCButton { + padding-left: 35px; + padding-right: 0; +} + +#MembershipOptionsTable .BCText { + padding-right: 20px; + width: 150px; + text-align: left; +} + +.TurboSpan { + color: #72942E; +} + +#upgrades-membership-options { + font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif; + font-size: 13px; + background: #fff; + padding-top: 10px; + clear: left; + width: 100%; + border-collapse: collapse; + text-align: center; +} + +#upgrades-membership-options th { + font-size: 15px; + font-weight: normal; + color: #2163A5; + padding: 5px 8px; + border-bottom: 1px solid #D3D3D3; + line-height: 32px; +} + +#upgrades-membership-options th img { + float: left; +} + +#upgrades-membership-options td { + color: #2163A5; + padding: 5px 10px; +} + +#upgrades-membership-options tbody tr:hover td { + color: Maroon; +} + +#upgrades-membership-options .leftBorder { + border-left: 1px solid #D3D3D3; + width: 150px; +} + +#upgrades-membership-options .odd { + background: #e8edff; +} + +#upgrades-membership-options .LeftText { + text-align: left; +} + +#BuildersClubContainer #LeftColumn #WindowsOnlyWarning { + padding-left: 10px; + padding-bottom: 1px; +} + +#BuildersClubContainer #RightColumn { + margin: 10px 0 10px 5px; + width: 290px; + float: right; +} + +.RightColumnBox, +#UpgradeCompleteContainer { + border: 2px solid #6e99c9; + margin-bottom: 20px; + padding: 10px; + background-color: #fff; +} + +.RightColumnBox a { + text-decoration: underline; +} + +.RightColumnBox h2 { + float: left; + font-size: 14px; + color: Maroon; +} + +.RightColumnBox h3 { + text-align: left; + font-size: 11px; + clear: both; +} + +.RightColumnBox h1 { + float: left; + font-size: 16px; + color: Maroon; + padding-left: 10px; + font-weight: bold; +} + +.RightColumnManageAccount { + border-left: 2px solid #6e99c9; + border-bottom: 2px solid #6e99c9; + border-right: 2px solid #6e99c9; + background-color: #fff; + margin-bottom: 20px; +} + +#CancelMembership { + padding-top: 10px; + padding-bottom: 10px; + text-align: center; +} + +#RightColumn #ManageAccountBody { + padding: 10px; +} + +#RightColumn #ManageAccount #CancelMembershipButton, +#RedirectToLoginLink { + text-align: center; +} + +.OBCSellButton { + border: 0; + cursor: pointer; + top: 218px; + position: absolute; +} + +.BuyRobuxBtn { + display: inline-block; + width: 205px; + height: 44px; + background: url(/images/buildersClubPage_buyRobux_44px.png) no-repeat; +} + +.BuyRobuxBtn:hover { + background-position: 0 -44px; + cursor: pointer; +} + +.cardPanelLeft { + margin-left: 12px; + margin-top: 25px; + float: left; +} + +.cardPanelRight { + margin-right: 12px; + margin-top: 10px; + float: right; +} + +.centeredImage { + margin-bottom: 10px; +} + +#GameCardButtonContainer { + clear: both; + margin: 15px 0; +} + +.WhereToBuyTableCell, +WhereToBuyTableCellRight { + width: 320px; + padding: 10px 0; +} + +.WhereToBuyTableCellRight { + text-align: left; +} + +.AwardAssetDisplayList { + display: inline-block; + *display: inline; + *zoom: 1; + vertical-align: top; + width: 100px; + height: 100px; +} + +.PaymentTextBox { + padding: 5px; + width: 90%; +} + +.PaymentLabel { + width: 120px; + font-weight: bold; +} + +.PaymentPadding { + padding: 5px; +} + +.AutoRecurText { + color: Red; + display: none; +} + +#post-image-main, +#upload-video-main { + font-size: 16pt; + font-weight: bold; + text-align: center; +} + +#post-image-main a, +#post-image-main a:hover, +#upload-video-main a, +#upload-video-main a:hover { + text-decoration: none; +} + +#post-image-ul, +#upload-video-ul { + text-align: left; + font-weight: normal; + font-size: 12pt; +} + +#post-image-small, +#upload-video-small { + font-weight: normal; + font-size: 12pt; +} + +#post-image-footer, +#upload-video-footer { + text-align: right; +} + +#post-image-footer a, +#upload-video-footer a { + font-size: 12pt; + font-weight: bold; + text-decoration: none; +} + +#post-image-footer a:hover, +#upload-video-footer a:hover { + text-decoration: none; +} + +#UserContainer { + font-family: Verdana, Sans-Serif; +} + +#UserContainer #LeftBank { + float: left; + text-align: center; + width: 444px; +} + +#UserContainer #RightBank { + float: right; + text-align: center; + width: 444px; +} + +#UserContainer #LeftBank #UserPageLargeRectangleAd { + border: none; +} + +#UserPlacesPane { + clear: both; + background-color: #FFF; +} + +#UserPlacesPane { + clear: both; + background-color: #FFF; +} + +.FriendRequestsPane, +#UserModelsContainer, +#UserAssetsPane { + clear: both; + margin: 10px 0 0 0; + text-align: center; +} + +#UserBadgesPane, +#UserStatisticsPane { + margin: 10px 0 0 0; +} + +#UserStatisticsPane { + text-align: left; +} + +#FriendsPane, +#FavoritesPane { + clear: right; + margin: 10px 0 0 0; +} + +#UserAssetsPane { + margin-bottom: 10px; +} + +#UserBadgesPane #UserBadges { + background-color: #fff; + text-align: center; +} + +#ProfilePane h4 { + background-color: #ccc; + border-top: solid 1px #000; + color: #333; + font-family: Comic Sans MS, Verdana, Sans-Serif; + font-size: 1.3em; + margin: 0; + text-align: center; +} + +#ProfilePane p { + margin: 0.9em 0; + line-height: 1.6em; +} + +#UserAssetsPane #UserAssets h4, +#UserBadgesPane #UserBadges h4, +#UserPlacesPane #UserPlaces h4, +#UserStatisticsPane #UserStatistics h4, +#FavoritesPane #Favorites h4 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-family: Comic Sans MS, Verdana, Sans-Serif; + margin: 0; + text-align: center; +} + +#UserPlacesPane #UserPlaces h4 { + background-color: #6e99c9; + color: #fff; + font-family: Verdana, Sans-Serif; + font-size: 1.4em; + font-weight: normal; + letter-spacing: 0.1em; + line-height: 1.5em; +} + +#UserStatisticsPane #UserStatistics { + background-color: #eee; + padding-bottom: 10px; +} + +#UserStatisticsPane #UserStatistics h4 { + margin-bottom: 5px; +} + +#UserStatisticsPane #UserStatistics .Statistic { + line-height: 1.8em; + margin: 0 auto; + width: 385px; +} + +#UserStatisticsPane #UserStatistics .Label { + float: left; + text-align: right; + width: 178px; +} + +#UserStatisticsPane #UserStatistics .Value { + float: right; + width: 177px; +} + +#UserModelsContainer { + text-align: left; +} + +#Friends { + margin-top: 10px; +} + +#Friends h4, +#FriendRequests h4 { + font-size: 10pt; + font-weight: bold; + line-height: 1em; + margin-bottom: 5px; + margin-top: 5px; +} + +.NoResults { + line-height: 1.3em; + padding: 10px; + text-align: center; +} + +.Badge { + margin: 10px 10px; + text-align: center; +} + +.Friend { + margin: 10px; +} + +.Friend .Avatar { + text-align: center; +} + +.Friend .Summary, +.Friend .Options { + margin-top: 5px; + text-align: center; +} + +#UserContainer .CollapsiblePanelHint { + color: #999; + padding: 5px; + text-align: center; +} + +#UserContainer #AssetsMenu { + float: left; + width: 158px; +} + +#UserContainer #AssetSearchOption { + float: left; +} + +#UserContainer #AssetUploadOption { + float: right; +} + +#UserContainer #AssetsList { + clear: both; +} + +#UserAssetsPane .AssetsMenuItem { + border: solid 1px #777; + margin: 15px; + padding: 3px 10px; + width: 100px; +} + +#UserAssetsPane .AssetsMenuItem:hover { + border: solid 1px #000; + cursor: pointer; + margin: 15px; + width: 100px; +} + +#UserAssetsPane .AssetsMenuItem_Selected { + background-color: #6e99c9; + border: solid 1px #000; + margin: 15px; + padding: 3px 10px; + width: 100px; +} + +#UserAssetsPane .AssetsMenuButton { + color: #777; + font: normal 14px/normal Verdana, sans-serif; +} + +#UserAssetsPane .AssetsMenuButton:hover { + color: #000; + text-decoration: none; +} + +#UserAssetsPane .AssetsMenuButton_Selected { + color: #fff; + font: normal 14px/normal Verdana, sans-serif; + text-decoration: none; +} + +#UserPlaces .PanelFooter, +#GroupPlaces .PanelFooter, +#Favorites .PanelFooter { + background-color: #fff; + color: #333; + font-family: Verdana, Sans-Serif; + margin: 0; + padding: 3px; + text-align: center; +} + +#UserPlaces .AccordionHeader { + background-color: #ccc; + border: solid 1px #000; + cursor: pointer; + font: bold 1em/normal Verdana, sans-serif; + letter-spacing: 0.1em; + margin: 1px 0; + padding: 1px 1em; + text-align: left; +} + +#UserPlaces .AccordionHeader:hover { + background-color: #6e99c9; + color: #fff; +} + +#UserPlaces .Place .PlayStatus { + margin: 5px 0 0 0; + display: inline; +} + +#UserPlaces .Place .PlayOptions { + margin: 5px 0 0 0; + display: inline; +} + +#UserPlaces .Place .PlayOptions .Button { + border-color: #333; + color: #333; + margin: 0 3px; +} + +#UserPlaces .Place .PlayOptions .Button:hover { + background-color: #6e99c9; + color: #fff; +} + +#UserPlaces .Place .Statistics { + border-top: dashed 1px #555; + border-left: dashed 1px #555; + border-right: dashed 1px #555; + color: #555; + font: normal 1em/normal Verdana, sans-serif; + letter-spacing: 0.1em; + line-height: 1.7em; + margin: 0; + margin-top: 10px; +} + +#UserPlaces .Place .Thumbnail { + border: solid 1px #555; + margin: 0; +} + +#UserPlaces .Place .Description { + border: dashed 1px #555; + color: #555; + font: normal 1em/normal Verdana, sans-serif; + max-height: 75px; + line-height: 1.7em; + margin: 5px 0 0 0; + padding: 5px 10px; + overflow: auto; + text-align: left; +} + +#UserPlaces .Place .Configuration { + border-bottom: dashed 1px #555; + border-left: dashed 1px #555; + border-right: dashed 1px #555; + font: normal 1em/normal Verdana, sans-serif; + line-height: 1.7em; + padding: 5px 10px; +} + +#UserContainer #AssetsContent { + float: left; + font-family: Verdana, Sans-Serif; + margin: 0 auto; + margin-left: 28px; + margin-right: 28px; + min-width: 0; + padding-bottom: 10px; + padding-left: 0; + padding-right: 0; + position: relative; + text-align: left; + width: 662px; +} + +#UserContainer #AssetsContent .HeaderPager, +#UserContainer #FavoritesContent .HeaderPager, +#UserContainer #AssetsContent .FooterPager, +#UserContainer #FavoritesContent .FooterPager { + clear: both; + margin: 0 12px 0 10px; + padding: 2px 0; + text-align: center; +} + +#UserContainer #AssetsContent .HeaderPager, +#UserContainer #FavoritesContent .HeaderPager { + margin-bottom: 10px; +} + +#UserContainer #AssetsContent .HeaderPager .Label, +#UserContainer #FavoritesContent .HeaderPager .Label, +#UserContainer #AssetsContent .FooterPager .Label, +#UserContainer #FavoritesContent .FooterPager .Label { + font-size: 1em; + vertical-align: middle; +} + +#UserContainer .Asset { + margin: 0 10px 15px 10px; + vertical-align: top; + width: 112px; +} + +#UserContainer .Asset .AssetThumbnail { + border: solid 1px #000; + height: 110px; + position: relative; + text-align: center; + width: 110px; +} + +#UserContainer .Asset .AssetDetails { + overflow: hidden; + padding: 2px 0 6px 0; + text-align: left; + width: 110px; +} + +#UserContainer .AssetName a { + font-size: 0.9em; + font-weight: bold; + line-height: 1.5em; + vertical-align: top; +} + +.AssetsBullet { + padding-right: 3px; +} + +#UserContainer .Label, +#UserContainer .Detail, +#UserContainer .DetailHighlighted, +#UserContainer .PriceInRobux, +#UserContainer .PriceInTickets { + font-size: 0.8em; +} + +#UserContainer .DetailHighlighted { + color: Red; + font-weight: bold; +} + +#UserContainer .PriceInRobux { + color: Green; + font-weight: bold; +} + +#UserContainer .PriceInTickets { + color: #fbb117; + font-weight: bold; +} + +.UserOnlineMessage { + font-family: Verdana; + font-size: 8pt; + color: Red; +} + +.UserOfflineMessage { + font-family: Verdana; + font-size: 8pt; + color: Gray; +} + +.AdPanel { + position: relative; + margin: 0 auto; +} + +.BanishButtonOverlay { + background-color: #eee; + border: solid 1px #444; + font-size: 0.8em; + padding: 1px 3px 2px 3px; + position: absolute; + text-align: center; + top: 0; + right: 0; +} + +.BanishButtonOverlay:hover { + background-color: #fff; + border: solid 1px #000; + text-decoration: none; +} + +.DeleteButtonOverlay { + background-color: #eee; + border: solid 1px #444; + font-size: 0.8em; + padding: 1px 3px 2px 3px; + position: absolute; + right: 2px; + text-align: center; + top: 2px; +} + +.DeleteFavoriteOverlay { + background-color: #eee; + border: solid 1px #444; + font-size: 0.8em; + padding: 1px 3px 2px 3px; + position: relative; + left: -57px; + text-align: center; + top: -97px; +} + +.DeleteButtonOverlay:hover { + background-color: #fff; + border: solid 1px #000; + text-decoration: none; +} + +.PlaceAccessIndicator { + color: #000; +} + +.SubscriptionStatusPanel { + width: 348px; + font-weight: bold; + margin-top: 5px; + padding: 5px 5px 5px 5px; + border: solid 1px black; + background-color: #ccc; +} + +.ProfileAlertPanel { + width: 348px; + padding: 5px 5px 5px 5px; + background-color: #FFF; + border: solid 1px black; + height: 64px; +} + +.UserBlurb { + overflow: hidden; + width: 348px; + padding: 5px 5px 5px 5px; + line-height: 20px; + background-color: #FFF; + border: solid 1px #000; +} + +#AccountSettingsForm { + font-size: 11px; + line-height: 18px; +} + +#AccountSettingsForm fieldset { + border: 1px solid #ddd; + padding: 5px 5px 5px 5px; +} + +.MyRobloxContainer { + font-family: Verdana, Sans-Serif; + margin: 0 auto; + width: 900px; +} + +.ThemeStandardColorBackground { + background: #6e99c9; +} + +.StandardBox, +.StandardBoxWhite, +.StandardBoxGray { + float: none; + border: 2px solid #6e99c9; + background-color: White; + padding: 10px 10px 10px 10px; + margin-bottom: 10px; + display: block; +} + +.StandardBoxWhite { + *zoom: 1; +} + +.StandardBoxGrey { + float: inherit; + border: 2px solid #6e99c9; + background-color: #A6A6A6; + padding: 10px 10px 10px 10px; + margin-bottom: 10px; + display: block; +} + +.StandardBoxHeader, +.StandardBoxHeaderGray, +.StandardTabWhite, +.StandardTabGray, +.StandardTabGrayActive { + float: none; + background-color: #6e99c9; + text-align: center; + color: White; + font-size: 16px; + font-weight: bold; + padding: 5px 12px 5px 12px; + display: block; + *display: inline; + *zoom: 1; + cursor: pointer; +} + +.StandardBoxHeaderGray { + background-color: #A6A6A6; +} + +.StandardTabWhite, +.StandardTabGrayActive, +.StandardTabGray { + display: inline-block; + height: 26px; + z-index: 2; + position: relative; + *display: inline; + *zoom: 1; +} + +.StandardTabWhite span { + *padding-right: 14px; +} + +.StandardTabGray { + background-color: #b4cde9; + margin-right: 4px; +} + +.StandardTabGrayActive { + margin-right: 4px; +} + +.StandardTabGray a, +.StandardTabGrayActive a { + color: White; +} + +.StandardTabGray:hover, +.StandardTabGrayActive { + background-color: #6c98cb; + color: White; +} + +.Column1a { + width: 290px; + float: left; + margin-top: 10px; +} + +.Column2a { + margin-top: 10px; + width: 600px; + float: right; +} + +.Column1a .StandardBox { + width: 266px; +} + +.Column1a .StandardBoxHeader, +.Column1a .StandardBoxHeaderGray { + width: 266px; +} + +.Column2a .StandardBox { + width: 576px; +} + +.Column2a .StandardBoxHeader, +.Column2a .StandardBoxHeaderGray { + width: 576px; +} + +.Column1b { + margin-top: 10px; + width: 190px; + float: left; + margin-right: 15px; +} + +.Column2b { + margin-top: 10px; + width: 490px; + float: left; +} + +.Column3b { + margin-top: 10px; + width: 190px; + float: right; +} + +.Column1b .StandardBox { + width: 166px; +} + +.Column1b .StandardBoxHeader, +.Column1b .StandardBoxHeaderGray { + width: 166px; +} + +.Column2b .StandardBox { + width: 466px; +} + +.Column2b .StandardBoxHeader, +.Column2b .StandardBoxHeaderGray { + width: 466px; +} + +.Column3b .StandardBox { + width: 166px; +} + +.Column3b .StandardBoxHeader, +.Column3b .StandardBoxHeaderGray { + width: 166px; +} + +.Column1c { + margin-top: 10px; + width: 590px; + float: left; +} + +.Column2c { + margin-top: 10px; + width: 290px; + float: right; +} + +.Column1c .StandardBox { + width: 556px; +} + +.Column1c .StandardBoxHeader, +.Column1c .StandardBoxHeaderGray { + width: 556px; +} + +.Column2c .StandardBox { + width: 266px; +} + +.Column2c .StandardBoxHeader, +.Column2c .StandardBoxHeaderGray { + width: 266px; +} + +.Column1d { + margin-top: 10px; + width: 440px; + float: left; +} + +.Column2d { + margin-top: 10px; + width: 440px; + float: right; +} + +.Column1d .StandardBox, +.Column1d .StandardBoxWhite { + width: 416px; +} + +.Column1d .StandardBoxHeader, +.Column1d .StandardBoxHeaderGray, +.Column1d .StandardTabWhite { + width: 416px; +} + +.Column2d .StandardBox, +.Column2d .StandardBoxWhite { + width: 416px; +} + +.Column2d .StandardBoxHeader, +.Column2d .StandardBoxHeaderGray, +.Column2d .StandardTabWhite { + width: 416px; +} + +.Column1e { + margin-top: 10px; + width: 150px; + float: left; +} + +.Column2e { + margin-top: 10px; + width: 740px; + margin-left: 10px; + float: left; +} + +.Column1e .StandardBox { + width: 136px; +} + +.Column1e .StandardBoxHeader, +.Column1e .StandardBoxHeaderGray { + width: 126px; +} + +.Column2e .StandardBoxGray { + width: 726px; + padding: 5px; +} + +.Column2e .StandardBoxHeader, +.Column2e .StandardBoxHeaderGray { + width: 356px; +} + +.Column1f { + margin-top: 10px; + width: 380px; + float: left; +} + +.Column2f { + margin-top: 10px; + width: 500px; + float: right; +} + +.Column1f .StandardBox { + width: 356px; +} + +.Column1f .StandardBoxHeader, +.Column1f .StandardBoxHeaderGray { + width: 356px; +} + +.Column2f .StandardBox { + width: 476px; +} + +.Column2f .StandardBoxHeader, +.Column2f .StandardBoxHeaderGray { + width: 476px; +} + +.Repeater { + border: 0; + width: 100%; +} + +.Repeater .AlternatingItemTemplateOdd { + background-color: #eee; + padding: 5px 5px 5px 5px; +} + +.Repeater .AlternatingItemTemplateEven { + background-color: #fff; + padding: 5px 5px 5px 5px; +} + +.Repeater .RepeaterImage { + float: left; + vertical-align: top; + margin: 5px 5px 5px 5px; +} + +.Repeater .RepeaterText { + float: left; + vertical-align: top; + margin: 5px 5px 5px 5px; +} + +.Repeater .RepeaterImageNoFloat { + text-align: left; + vertical-align: middle; + padding-left: 5px; +} + +.Repeater .RepeaterTextNoFloat { + text-align: left; + vertical-align: top; + padding: 5px; +} + +.Repeater thead { + font-size: 15px; + font-weight: normal; + color: #2163A5; + border-bottom: 1px solid #D3D3D3; +} + +.Column2b .Repeater .AlternatingItemTemplateOdd, +.Column2b .Repeater .AlternatingItemTemplateEven { + width: 466; + height: 50px; +} + +.GreySearchBar { + background-color: #7F7F7F; + border-color: #385D8A; + width: 150px; + color: White; + cursor: default; +} + +.GreySearchButton { + background-color: #7F7F7F; + border-color: #385D8A; + width: 50px; + color: White; +} + +.DescriptionText { + font-size: 14px; + padding: 10px; + background: #D2E3F7; +} + +.tab_white_31h_container .ajax__tab_header { + font-family: verdana, tahoma, helvetica; + font-size: 11px; + background: url(/images/tab-line.gif) repeat-x bottom; +} + +.tab_white_31h_container .ajax__tab_outer { + margin: 0; + background: url(/images/tab-right.gif) no-repeat right; + height: 21px; +} + +.tab_white_31h_container .ajax__tab_inner { + padding-left: 3px; + background: url(/images/tab-left.gif) no-repeat; +} + +.tab_white_31h_container .ajax__tab_tab { + height: 13px; + padding: 4px; + margin: 0; + background: url(/images/tab.gif) repeat-x; +} + +.tab_white_31h_container .ajax__tab_hover .ajax__tab_outer { + background: url(/images/tab-hover-right.gif) no-repeat right; +} + +.tab_white_31h_container .ajax__tab_hover .ajax__tab_inner { + background: url(/images/tab-hover-left.gif) no-repeat; +} + +.tab_white_31h_container .ajax__tab_hover .ajax__tab_tab { + background: url(/images/tab-hover.gif) repeat-x; +} + +.tab_white_31h_container .ajax__tab_active .ajax__tab_outer { + background: url(/images/tab-active-right.gif) no-repeat right; +} + +.tab_white_31h_container .ajax__tab_active .ajax__tab_inner { + background: url(/images/tab-active-left.gif) no-repeat; +} + +.tab_white_31h_container .ajax__tab_active .ajax__tab_tab { + background: url(/images/tab-active.gif) repeat-x; +} + +.tab_white_31h_container .ajax__tab_body { + font-family: verdana, tahoma, helvetica; + font-size: 10pt; + border: 1px solid #999; + border-top: 0; + padding: 8px; + background-color: #fff; +} + +.rbx2only { + display: none; +} + +.GreenButton { + height: 30px; + background: url(/images/btn_green_30h_t1.png) no-repeat; + display: inline-block; + font-family: Arial, Helvetica, Sans-Serif; + font-weight: bold; + font-size: 14px; + cursor: pointer; + *display: inline; + *zoom: 1; +} + +.GreenButton span { + height: 23px; + background: url(/images/btn_green_30h_t2.png) no-repeat top right; + margin: 0 0 0 4px; + display: block; + padding: 7px 12px 0 5px; + cursor: pointer; + color: White; +} + +.GreenButton span a { + color: White; + text-decoration: none; +} + +.GreenButton:hover { + background-position: 0 -30px; + cursor: pointer; + text-decoration: none; +} + +.GreenButton span:hover { + background-position: right -30px; + cursor: pointer; +} + +.RedButton { + height: 30px; + background: url(/images/btn_red_30h_t1.png) no-repeat; + display: inline-block; + font-family: Arial, Helvetica, Sans-Serif; + font-weight: bold; + font-size: 14px; + cursor: pointer; + *display: inline; + *zoom: 1; +} + +.RedButton span { + height: 23px; + background: url(/images/btn_red_30h_t2.png) no-repeat top right; + margin: 0 0 0 4px; + display: block; + padding: 7px 12px 0 5px; + cursor: pointer; + color: White; +} + +.RedButton span a { + color: White; + text-decoration: none; +} + +.RedButton:hover { + background-position: 0 -30px; + cursor: pointer; + text-decoration: none; +} + +.RedButton span:hover { + background-position: right -30px; + cursor: pointer; +} + +.Money { + color: #090; +} + +.SuccessBox { + border: solid 2px #a6dba6; + color: #090; + font-weight: bold; + padding: 5px; + margin: 20px 0; +} + +.ErrorBox, +.MessageBox { + border: solid 2px #ffa6a6; + color: #f00; + font-weight: bold; + padding: 5px; + margin: 20px 0; +} + +.MessageBox { + height: 65px; +} + +.GameCardMessageBox { + border: solid 2px #ffa6a6; + color: #f00; + font-weight: bold; + height: 56px; + padding: 5px; + *height: 66px; + margin: 20px 0; +} + +.GameCardSpecialOffer { + left: 73px; + position: relative; + top: -45px; +} + +.GameCardMessage { + color: #333; + left: 73px; + position: relative; + top: -44px; +} + +.BoxTextAligned { + margin-left: 10px; + position: relative; + top: -20px; +} + +#RedeemContainer { + font-family: Arial, Helvetica, Sans-Serif; + font-size: 14px; + color: Black; +} + +#RedeemContainer a { + color: #00f; +} + +#RedeemContainer a:hover { + text-decoration: none; +} + +#RedeemContainer #pin { + height: 21px; + font-size: 12px; +} + +.BigLinks { + font-size: 16px; + font-weight: bold; +} + +.SkinnyRightArrow { + cursor: pointer; + background: url(/images/arrow_skinny55h_right.png) no-repeat; + width: 12px; + height: 55px; + display: inline-block; + *display: inline; + *zoom: 1; +} + +.SkinnyRightArrow:hover { + background-position: 0 -55px; +} + +.SkinnyRightArrowDisabled { + background: url(/images/arrow_skinny55h_right.png) no-repeat 0 -110px; + width: 12px; + height: 55px; + display: inline-block; + *display: inline; + *zoom: 1; +} + +.SkinnyLeftArrow { + cursor: pointer; + background: url(/images/arrow_skinny55h_left.png) no-repeat; + width: 12px; + height: 55px; + display: inline-block; + *display: inline; + *zoom: 1; +} + +.SkinnyLeftArrow:hover { + background-position: 0 -55px; +} + +.SkinnyLeftArrowDisabled { + background: url(/images/arrow_skinny55h_left.png) no-repeat 0 -110px; + width: 12px; + height: 55px; + display: inline-block; + *display: inline; + *zoom: 1; +} + +.BlueLeftArrow { + cursor: pointer; + background: url(/images/arrow_36px_left.png) no-repeat; + width: 36px; + height: 36px; + display: inline-block; + *display: inline; + *zoom: 1; +} + +.BlueLeftArrow:hover { + background: url(/images/arrow36px_leftOn.png) no-repeat; +} + +.BlueRightArrow { + cursor: pointer; + background: url(/images/arrow_36px_right.png) no-repeat; + width: 36px; + height: 36px; + display: inline-block; + *display: inline; + *zoom: 1; +} + +.BlueRightArrow:hover { + background: url(/images/arrow36px_rightOn.png) no-repeat; +} + +.BCHat { + background: url(/images/Games/gamesPage_bcHelmet.png) no-repeat; + width: 35px; + height: 29px; + display: inline-block; + margin-top: 3px; + *display: inline; + *zoom: 1; +} + +.notificationBox { + display: inline-block; + background-color: #f00; + color: #fff; + height: 16px; + min-width: 18px; + width: auto; + font-size: 14px; + font-weight: bold; + margin: 2px 2px 4px 2px; + padding: 0 2px; + line-height: 1.1em; + text-align: center; + border-radius: 2px; +} + +.notificationBoxIE { + display: inline-block; + color: #fff; + background-image: url(/images/bg-notifications.png); + background-repeat: repeat-x; + background-position: left top; + min-width: 24px; + width: auto; + height: 16px; + text-align: center; + font-size: 14px; + font-weight: bold; + *display: inline; + *zoom: 1; +} + +#BuildersClubContainer { + margin-left: -5px; +} + +#CatalogContainer > .StandardBox { + padding: 3px 6px 8px 5px; +} + +.Assets .StandardBoxHeader { + width: 660px; +} + +.Assets .StandardBox { + width: 660px; +} + +.Contests { + margin-left: -5px; +} + +.DarkGradientBox { + background: none; + width: 150px; + color: Black; + position: relative; + border: none; +} + +.DarkGradientBox .DGB_Header { + font-size: 14px; + font-weight: bold; + text-align: center; + padding-top: 5px; + padding-bottom: 5px; + border-bottom: none; +} + +.DarkGradientBox .DGB_TextBox { + border: solid 1px #888; +} + +.DarkGradientBox .DGB_Label { + color: Black; + font-size: 10px; + font-weight: bold; + text-align: left; +} + +.DarkGradientBox .DGB_Button { + cursor: pointer; + background-color: #435D77; + color: White; + text-decoration: none; + border: solid 1px #777; + padding: 6px 10px 6px 10px; + font-family: Verdana, Sans-Serif; + font-size: 12px; + font-weight: bold; + text-align: center; + white-space: nowrap; +} + +.DarkGradientBox .DGB_Button:link, +.DarkGradientBox .DGB_Button:visited { + background-color: #435D77; + color: White; + text-decoration: none; +} + +.DarkGradientBox .DGB_Button:hover, +.DarkGradientBox .DGB_Button:active { + background-color: #B6CCE4; + color: #435D77; + text-decoration: none; +} + +#GamesContainer .DisplayFilters { + width: 126px; +} + +.WaitCursor, +.WaitCursor * { + cursor: wait !important; +} + +.PlayButton, +.BuildButton, +.PlayButtonSelected, +.BuildButtonSelected { + height: 54px; + width: 123px; + display: block; + cursor: pointer; +} + +.PlayButton { + background-image: url("/images/games/playBtn_off.png"); + background-repeat: no-repeat; +} + +.BuildButton { + background-image: url("/images/games/buildBtn_off.png"); + background-repeat: no-repeat; +} + +.PlayButton:hover, +.PlayButtonSelected { + background-image: url("/images/games/playBtn_on.png"); + background-repeat: no-repeat; +} + +.BuildButton:hover, +.BuildButtonSelected { + background-image: url("/images/games/buildBtn_on.png"); + background-repeat: no-repeat; +} + +#BCOnlyPlaces { + width: 416px; +} + +#BCOnlyPlaces .StandardBoxHeaderGray { + width: 399px; + height: 33px; + padding: 0 7px 0 16px; +} + +#BCOnlyPlaces .StandardBox { + padding: 5px; +} + +#GamesLeftColumn { + width: 126px; +} + +#InboxTabs { + position: relative; + top: 2px; +} + +#ItemContainer #Summary { + background-color: Transparent; + border: none; + font-family: Verdana, Geneva, sans-serif; + font-size: 11px; + color: Black; +} + +#ItemContainer #Summary .label { + color: #888; +} + +#ItemContainer #Summary .box .head { + color: Black; +} + +#ItemContainer #Summary .box .body { + border: 1px solid #CCC; + padding: 4px 8px 8px; + color: #000; +} + +#ItemContainer h3 { + font-family: Verdana, Geneva, sans-serif; + font-size: 11px; + color: #888; + letter-spacing: normal; +} + +.ReportAbuse { + text-align: right; +} + +.ReportAbuse .AbuseButton a { + color: #F99; + background: none; + padding-left: 16px; + padding-bottom: 2px; +} + +.ReportAbuse .AbuseButton a:hover { + background: url("/images/css/abuse.png") no-repeat scroll 0 2px transparent; + color: #F00; +} + +.ReportAbuse img { + display: none; +} + +.MultiplayerVisit:hover { + background-position: 0 54px; +} + +.MultiplayerVisit { + width: 212px; + height: 54px; + background: url(/images/css/btn_play_54h.png); +} + +.SoloVisit:hover { + color: #0C0; +} + +.SoloVisit { + background: none; + color: #080; + font-size: 14px; + position: relative; + top: -20px; + left: 28px; + width: auto; + height: auto; +} + +.SoloVisitText { + display: inline; +} + +#ItemContainer .PlayGames { + background-color: Transparent; + border: none; + padding: 0; + width: 100%; + margin: 4px 0 16px 0; +} + +.PlaceInfoIcons { + margin: 4px 0 0 1px; + text-align: right; +} + +.iPublic, +.iUnlocked { + background: url(/images/css/icon_public.png); + width: 20px; + height: 20px; +} + +.iLocked { + background: url(/images/css/icon_public.png); + width: 20px; + height: 20px; + background-position: -20px; +} + +.SharedIcon { + background: url(/images/css/icon_locked.png); + width: 20px; + height: 20px; + background-position: -20px; +} + +.CopyLockedIcon { + background: url(/images/css/icon_locked.png); + width: 20px; + height: 20px; +} + +.AllGearIcon { + background: url(/images/css/icon_gear.png); + width: 20px; + height: 20px; +} + +.GenreGearIcon { + background: url(/images/css/icon_gear.png); + background-position: 0 -20px; + width: 20px; + height: 20px; +} + +.NoGearIcon { + background: url(/images/css/icon_gear.png); + background-position: 0 -40px; + width: 20px; + height: 20px; +} + +#ItemContainer .ajax_tab_label { + color: #333; + font-size: 16px; + font-weight: bold; + font-family: Arial, Helvetica, sans-serif; + letter-spacing: normal; +} + +#ItemContainer #Thumbnail, +#ItemContainer #Thumbnail_Place { + border: none; +} + +#ItemContainer .CommentsContainer .Comments { + border: 0 none; +} + +#ItemContainer .CommentsContainer .Comment { + background: none; +} + +#ItemContainer .CommentsContainer .Avatar { + border: 0 none; +} + +#ItemContainer .CommentsContainer .Post .Audit { + color: #888; +} + +#BadgeStatsHeader { + width: auto; +} + +.sbMini { + margin-top: 5px; + font-family: Verdana, Sans-Serif; + font-size: 16px; + margin-right: 7px; +} + +.ProfileAlertPanel { + border: none; +} + +#UserPlaces .Place .Statistics, +#UserPlaces .Place .Configuration { + border: none; +} + +#GroupTitle { + width: 888px; +} + +.Column2b .StandardBoxGrey { + width: 454px; +} + +.subMenu { + background: url(/images/topNav_black.png); + width: 900px; + height: 30px; + border: none; + text-align: center; + margin-top: -5px; + margin-left: -5px; +} + +.subMenu ul { + margin: 0 0 0 27px; +} + +.subMenu > ul > li { + height: 30px; + margin: 0 2px; +} + +.subMenu ul ul { + left: -27px; +} + +.subMenu ul ul a, +.subMenu ul ul a:visited { + background: #444; + border: none; +} + +.subMenu ul ul a:hover { + background: #777; +} + +.subMenu > ul > li:hover { + background: url(/images/topNav_black.png); + background-position: 0 30px; +} + +.subMenu :hover > a, +.subMenu ul ul :hover > a { + text-decoration: none; +} + +.subMenu a:hover { + background: none; + text-decoration: none; +} + +.subMenu a, +.subMenu a:visited { + border: none; +} + +.subMenu .subMenuItemselected { + border: none; +} + +#CancelBuildersClubContainer h2, +#PaymentMethodsContainer h2, +#PaymentContainer h2, +#PayPalContainer h2, +#CashContainer h2, +#UpgradeCompleteContainer h2, +#ManageAccountUpgradesContainer h2, +#CancelAccountUpgradeContainer h2, +#AccountUpgradesConfirmationContainer h2 { + font-family: Arial, Helvetica, Sans-Serif; + color: #444; + font-size: 32px; + font-weight: bold; + letter-spacing: 0; +} + +#BuildersClubContainer #LeftColumn { + margin-left: 5px; +} + +#BuildersClubContainer #RightColumn { + margin-right: 5px; + font-family: Arial, Helvetica, Sans-Serif; + font-size: 14px; + color: #000; + width: 285px; +} + +#BuildersClubContainer #RightColumn .StandardBox { + width: 273px; +} + +#BuildersClubContainer #RightColumn .StrongRed { + font-family: Arial, Helvetica, Sans-Serif; + font-size: 14px; + font-weight: bold; + color: #f00; +} + +#BuildersClubContainer #RightColumn h3 { + font-weight: bold; + font-family: Arial, Helvetica, Sans-Serif; + font-size: 18px; + color: #333; +} + +#BuildersClubContainer #RightColumn .RefCode { + font-weight: bold; + font-family: Arial, Helvetica, Sans-Serif; + font-size: 30px; + color: #666; + display: block; + margin-bottom: 16px; +} + +#Header { + font-family: Arial, Helvetica, sans-serif; + position: absolute; + bottom: 0; +} + +#hlNews { + margin-right: 4px; +} + +.AlertSpace { + position: relative; + top: 0; + width: 147px; + height: 50px; + border: 1px solid #ccc; + margin: 0; + padding: 0; + margin-left: auto; + margin-right: auto; + font-family: Arial, Helvetica, sans-serif; + font-size: 14px; + font-weight: bold; +} + +#Header .AlertSpace { + float: right; + border: none; + margin-left: 0; + margin-right: 0; + background: url(/images/css/head_sign.png) 0 0; + height: 78px; +} + +.AlertSpace a { + position: absolute; + width: 43px; + padding-left: 18px; + background: url(/images/css/head_infobox_icons.png) no-repeat 0 0; +} + +.AlertSpace a:hover, +#Header .AlertSpace a:active { + text-decoration: none; +} + +.AlertSpace .MessageAlert { + border: none; + background: none; +} + +.AlertSpace .MessageAlert a { + left: 13px; + top: 8px; + color: #444; + background-position: -2px 0; +} + +.AlertSpace .MessageAlert a:hover { + color: #aaa; + background-position: -2px -20px; +} + +.AlertSpace .RobuxAlert { + border: none; + background: none; +} + +.AlertSpace .RobuxAlert a { + left: 13px; + top: 28px; + color: #080; + background-position: -2px -41px; +} + +.AlertSpace .RobuxAlert a:hover { + color: #0d0; + background-position: -2px -61px; +} + +.AlertSpace .FriendsAlert { + border: none; + background: none; +} + +.AlertSpace .FriendsAlert a { + left: 79px; + top: 8px; + color: #05b; + background-position: -2px -81px; +} + +.AlertSpace .FriendsAlert a:hover { + color: #0cf; + background-position: -2px -101px; +} + +.AlertSpace .TicketsAlert { + border: none; + background: none; +} + +.AlertSpace .TicketsAlert a { + left: 79px; + top: 28px; + color: #a61; + background-position: -2px -121px; +} + +.AlertSpace .TicketsAlert a:hover { + color: #fb6; + background-position: -2px -141px; +} + +div.icons, +a.icons { + display: none; +} + +div.message_icon { + display: none; +} + +div.friends_icon { + display: none; +} + +div.robux_icon { + display: none; +} + +div.tickets_icon { + display: none; +} + +#Header .Navigation { + width: 900px; + height: 30px; + background: url(/images/css/topNav_blue.png); + background-position: 0 0; + text-align: center; + line-height: 20px; +} + +.Navigation ul { + margin: 0 auto; + padding: 0; +} + +.Navigation li { + display: inline-block; + margin: 0; + padding: 6px 10px 0 10px; + height: 24px; + font-size: 16px; + font-weight: bold; +} + +.Navigation li:hover { + background: url(/images/css/topNav_blue.png); + background-position: 0 30px; +} + +.Navigation a { + display: inline-block; + color: #fff; +} + +.Navigation a:hover { + text-decoration: none; +} + +.Navigation ul li a, +.Navigation ul li a:visited { + border: none; + font-size: 16px; + padding: 0; +} + +.Navigation .dropdownmainnav { + border: none; + line-height: 2em; + background: #444; +} + +.Navigation .dropdownmainnav div { + background-color: #444; + cursor: pointer; +} + +.Navigation .dropdownmainnav div:hover { + background-color: #888; +} + +.StandardBox { + padding: 5px; + margin-bottom: 8px; + background: url(/images/css/standardBox_01_bkg.png) top repeat-x #fff; + border: 1px solid #aaa; + z-index: 0; +} + +.StandardBoxHeader, +.StandardBoxHeaderGray { + height: 33px; + padding: 0 7px 0 5px; + text-align: left; + z-index: 2; + background: url(/images/css/tab_black_33h_t1.png) no-repeat left top; + font-family: Arial, Helvetica, sans-serif; + font-size: 20px; + font-weight: bold; + color: #fff; + z-index: 0; +} + +.StandardBoxHeaderGray { + background: url(/images/css/tab_gray_33h_t1.png) no-repeat left top; +} + +.StandardBoxHeader span, +.StandardBoxHeaderGray span { + display: block; + width: 100%; + height: 29px; + padding: 5px 5px 0 2px; + background: url(/images/css/tab_black_33h_t2.png) no-repeat right top; + overflow: hidden; +} + +.StandardBoxHeaderGray span { + background: url(/images/css/tab_gray_33h_t2.png) no-repeat right top; +} + +.StandardTabWhite { + background: url(/images/css/tab_white_26h_t1.png) no-repeat left top; + padding: 0 4px; + float: none; + text-align: left; +} + +.StandardTabWhite span { + display: block; + width: 100%; + *width: 115%; + height: 26px; + padding: 5px 5px 0 9px; + background: url(/images/css/tab_white_26h_t2.png) no-repeat right top; + font-family: Arial, Helvetica, sans-serif; + font-size: 14px; + color: #000; + font-weight: normal; +} + +.StandardBoxWhite { + position: relative; + top: -1px; + background: #fff; + border: 1px solid #ccc; + padding: 8px; + color: Black; +} + +.StandardTabGray, +.StandardTabGrayActive { + position: relative; + background: url(/images/css/tab_white_31h_t1.png) no-repeat left top; + background-position: left 0; + height: 31px; + padding: 0; + text-align: left; + cursor: pointer; + margin: 0; +} + +.StandardTabGray span, +.StandardTabGrayActive span { + background: url(/images/css/tab_white_31h_t2.png) no-repeat right top; + background-position: right 0; + height: 25px; + padding: 6px 16px 0 8px; + margin: 0 0 0 4px; + color: #333; + font-family: Arial, Helvetica, sans-serif; + font-size: 16px; + font-weight: bold; + display: block; +} + +.StandardTabGray a, +.StandardTabGrayActive a { + color: #333; +} + +.StandardTabGrayActive { + background-position: left -62px; +} + +.StandardTabGrayActive span { + background-position: right -62px; +} + +.StandardTabGray:hover { + position: relative; + background: url(/images/css/tab_white_31h_t1.png) no-repeat left top; + background-position: left -31px; + height: 31px; + padding: 0; + z-index: 2; + text-align: left; + margin: 0; +} + +.StandardTabGray span:hover { + background: url(/images/css/tab_white_31h_t2.png) no-repeat right top; + background-position: right -31px; + height: 25px; + padding: 6px 16px 0 8px; + margin: 0 0 0 4px; + color: #333; + font-family: Arial, Helvetica, sans-serif; + font-size: 16px; + font-weight: bold; + display: block; +} + +.StandardBoxGray { + position: relative; + top: -2px; + padding: 8px 5px; + background: url(/images/css/standardBox_01_bkg.png) top repeat-x #fff; + border: 1px solid #aaa; +} + +.tab_white_31h_container .ajax__tab_header { + background: none; +} + +.tab_white_31h_container .ajax__tab_outer { + background: none; + height: auto; +} + +.tab_white_31h_container .ajax__tab_inner { + position: relative; + background: url(/images/css/tab_white_31h_t1.png) no-repeat left top; + height: 31px; + padding-left: 0; + z-index: 2; +} + +.tab_white_31h_container .ajax__tab_header .ajax__tab_tab { + background: url(/images/css/tab_white_31h_t2.png) no-repeat right top; + height: 25px; + padding: 6px 16px 0 8px; + margin: 0 0 0 4px; +} + +.tab_white_31h_container .ajax__tab_hover .ajax__tab_outer { + background: none; + height: auto; +} + +.tab_white_31h_container .ajax__tab_hover .ajax__tab_inner { + position: relative; + background: url(/images/css/tab_white_31h_t1.png) no-repeat left top; + background-position: left -31px; + height: 31px; + padding-left: 0; + z-index: 2; +} + +.tab_white_31h_container .ajax__tab_hover .ajax__tab_tab { + background: url(/images/css/tab_white_31h_t2.png) no-repeat right top; + background-position: right -31px; + height: 25px; + padding: 6px 16px 0 8px; + margin: 0 0 0 4px; +} + +.tab_white_31h_container .ajax__tab_active .ajax__tab_outer { + background: none; + height: auto; +} + +.tab_white_31h_container .ajax__tab_active .ajax__tab_inner { + position: relative; + background: url(/images/css/tab_white_31h_t1.png) no-repeat left top; + background-position: left -62px; + height: 31px; + padding-left: 0; + z-index: 2; +} + +.tab_white_31h_container .ajax__tab_active .ajax__tab_tab { + background: url(/images/css/tab_white_31h_t2.png) no-repeat right top; + background-position: right -62px; + height: 25px; + padding: 6px 16px 0 8px; + margin: 0 0 0 4px; +} + +.tab_white_31h_container .ajax__tab_body { + position: relative; + top: -2px; + padding: 8px 5px; + background: url(/images/css/standardBox_01_bkg.png) top repeat-x #fff; + border: 1px solid #aaa; +} + +.Column2a { + float: left; +} + +.Column3b { + float: left; +} + +.Column2c { + float: left; + margin-left: 10px; +} + +.Column2d { + float: left; +} + +.Column1e { + width: 140px; +} + +.Column2e .StandardBoxHeaderGray { + margin: 0; + width: 726px; +} + +.Column2e .StandardBoxGray { + width: 726px; +} + +.Column2f { + float: left; +} + +div.rbx2only { + display: block; +} + +.rbx2only { + display: inline; +} + +.rbx2hide { + display: none; +} + +#RobloxCentralBank { + overflow: hidden; +} + +.transparentBkg { + background-color: Transparent; +} + +.FriendRequestsPane { + width: 890px; +} + +.Shadow { + display: none; +} + +.ShadowedStandardBox .Header { + height: 33px; + padding: 0 7px 0 5px; + text-align: left; + z-index: 2; + background: url(/images/css/tab_black_33h_t1.png) no-repeat left top; + font-family: Arial, Helvetica, sans-serif; + font-size: 20px; + font-weight: bold; + color: #fff; +} + +.ShadowedStandardBox .Header span { + display: block; + width: 100%; + height: 29px; + background: url(/images/css/tab_black_33h_t2.png) no-repeat right top; + overflow: hidden; + height: 26px; + padding: 7px 4px 0 3px; +} + +.ShadowedStandardBox .Content { + padding: 5px; + margin-bottom: 8px; + background: url(/images/css/standardBox_01_bkg.png) top repeat-x #fff; + border: 1px solid #aaa; +} + +a.rss_icon { + background: url(/images/css/topNav_rss.png) no-repeat; +} + +.Column1d .StandardTabWhite, +.Column2d .StandardTabWhite { + width: auto; +} + +.MyRobloxContainer { + width: 890px; +} + +.BCHat { + margin-top: 1px; +} + +#partycontainer { + bottom: 110px; + right: 10px; +} + +.partyWindow { + color: #666; + font-family: Verdana, Geneva, sans-serif; + font-size: 11px; + width: 250px; +} + +.partyWindow .title { + background: transparent url("/images/friendsbar/tab_blue19h_l.gif") no-repeat left top; + display: block; + text-decoration: none; + padding-left: 2px; + height: 19px; + width: 248px; + cursor: pointer; +} + +.partyWindow .title span { + background: transparent url("/images/friendsbar/tab_blue19h_r.gif") no-repeat right top; + display: block; + height: 15px; + padding: 2px 15px 2px 7px; + text-decoration: none; + color: #fff; +} + +.partyWindow .title_flash { + background: transparent url("/images/friendsbar/tab_white19h_l2.gif") no-repeat left top; +} + +.partyWindow .title_flash span { + background: transparent url("/images/friendsbar/tab_white19h_r2.gif") no-repeat right top; + color: #444; +} + +.partyWindow .title strong { + display: block; + padding: 2px 15px 4px 6px; + background: url("/images/chat/tab_blue21h_r.png") no-repeat right top; + color: #fff; + width: 227px; + font-weight: bold; +} + +.partyWindow .closeparty { + width: 10px; + height: 9px; + /*float:right;*/ + margin: 5px 9px 0 0; + cursor: pointer; + position: absolute; + right: 0; + top: 0; + color: #fff; + font-weight: bold; + font-size: 14px; +} + +.partyWindow .main { + clear: both; + width: 248px; + height: auto; + margin: 0; + /*padding: 10px;*/ + background: #f2f2f2; + border: 1px solid #a6a6a6; + border-top: 0px none; + overflow: auto; +} + +.partyWindow .kickuser { + float: right; + padding-right: 5px; + color: Red; + cursor: pointer; +} + +#new_party p { + text-align: center; + padding: 40px 0 0 0; +} + +#party_none .main .btn_green21h { + margin: 15px 0 0 77px; +} + +.clear { + clear: both; +} + +.main #new_party_clear { + padding: 40px 0 0 0; +} + +/* Buttons using sliding doors */ +.btn_green21h { + float: left; + background: url("/images/chat/btn_green21h_l.png") no-repeat left top; + padding: 0 0 0 2px; +} + +.btn_green21h a { + display: block; + padding: 2px 14px 4px 10px; + background: url("/images/chat/btn_green21h_r.png") no-repeat right top; + color: White; + font-family: verdana; + font-weight: bold; + text-decoration: none; +} + +.btn_green21h:hover { + background: url("/images/chat/btn_green21h_over_l.png") no-repeat left top; +} + +.btn_green21h:hover a { + background: url("/images/chat/btn_green21h_over_r.png") no-repeat right top; +} + +.btn_red21h { + float: left; + background: url("/images/chat/btn_red21h_l.png") no-repeat left top; + padding: 0 0 0 2px; +} + +.btn_red21h a { + display: block; + padding: 2px 14px 4px 10px; + background: url("/images/chat/btn_red21h_r.png") no-repeat right top; + color: White; + font-family: verdana; + font-weight: bold; + text-decoration: none; +} + +.btn_red21h:hover { + background: url("/images/chat/btn_red21h_over_l.png") no-repeat left top; +} + +.btn_red21h:hover a { + background: url("/images/chat/btn_red21h_over_r.png") no-repeat right top; +} + +.btn_black21h { + float: left; + background: url("/images/chat/btn_black21h_l.png") no-repeat left top; + padding: 0 0 0 2px; + color: White; +} + +.btn_black21h a { + display: block; + padding: 2px 14px 4px 10px; + background: url("/images/chat/btn_black21h_r.png") no-repeat right top; + color: #FFF; + font-family: verdana; + font-weight: bold; + text-decoration: none; +} + +.btn_black21h:hover { + background: url("/images/chat/btn_black21h_over_l.png") no-repeat left top; +} + +.btn_black21h:hover a { + background: url("/images/chat/btn_black21h_over_r.png") no-repeat right top; +} + +/* Party Invite CSS */ +.main h1 { + padding: 15px 20px 15px 20px; + font-size: 130%; + text-align: center; +} + +.main #invite_status { + padding: 10px 0 10px 0; +} + +.main p { + padding: 0 0 7px 0; +} + +.main .btn_green21h { + float: left; + margin: 0 0 0 35px; +} + +.main .btn_black21h { + float: right; + margin: 0 35px 0 0; +} + +.main #invite_clear { + padding: 15px 0 0 0; +} + +/* Party Leader css */ +dt { + float: left; +} + +dd { + margin-left: 30px; +} + +.grey9 { + color: gray; + font-size: 9px; +} + +.status { + color: gray; + font-size: 11px; +} + +.name_me { + font-weight: bold; + color: #0066cc; +} + +.name_other { + font-weight: bold; + color: #007b00; +} + +.name_status { + font-weight: bold; +} + +.partyWindow { + color: black; + font-size: 11px; + height: auto; +} + +.members dl { + padding: 0 0 0 5px; +} + +.members dt { + padding: 4px 0 0 0; +} + +.members dd { + padding: 4px 0 1px 0; +} + +.main p { + padding: 10px 0 5px 0px; + text-align: center; +} + +#chat_messages { + padding: 0px 3px 3px 3px; + margin: 5px 5px 0 5px; + height: 217px; + overflow: auto; + background-color: white; + border-style: solid; + border-width: 1px; + border-color: #aaa; +} + +#chat_messages li { + padding: 6px 0 0 0; + list-style-type: none; +} + +#party_game_thumb { + width: 75px; + margin-right: 5px; + float: left; +} + +#party_current_game { + margin: 5px; +} + +#party_game_name { + width: 140px; + float: left; +} + +#party_game_follow_me { + margin-top: 5px; +} + +#chat_input { + margin: 5px 5px 0 5px; + padding-right: 2px; +} + +#chat_input input { + border: 1px solid #ccc; + width: 236px; + height: 40px; +} + +#chat_input textarea { + border: 1px solid #aaa; + overflow: auto; + width: 100%; + height: 50px; +} + +.main #leader_clear { + padding: 15px 0 0 0; +} + +#party_my .main .btn_black21h { + /*margin: 20px 0 0 73px;*/ + margin: 15px 70px 0 0; + /*position:absolute; + left:83px; + top:402px; + */ +} + +a.linkSmallBold, a.linkMenuSink { + font-weight: bold; + color: #0000FF; +} + +a.linkSmall, a.LinkSmallBold, a.linkMenuSink { + color: navy; + font-size: 0.9em; +} + +a.linkSmallBold:visited, a.linkMenuSink:visited { + font-weight: normal; + color: #013DA4; +} + +a.linkSmallBold:Hover, a.linkMenuSink:Hover { + color: #DD6900; +} + +/***************************************************** +Text and Anchor to display when a user is online +*****************************************************/ +.userOnlineLinkBold, a.userOnlineLinkBold, a.userOnlineLinkBold:Visited, a.userOnlineLinkBold:Hover, a.userOnlineLinkBold:Link { + font-weight: bold; + color: #0055E7; +} + +.moderatorOnlineLinkBold, a.moderatorOnlineLinkBold, a.moderatorOnlineLinkBold:Visited, a.moderatorOnlineLinkBold:Hover, a.moderatorOnlineLinkBold:Link { + font-weight: bold; + color: #00008B; +} + +.adminOnlineLinkBold, a.adminOnlineLinkBold, a.adminOnlineLinkBold:Visited, a.adminOnlineLinkBold:Hover, a.adminOnlineLinkBold:Link { + font-weight: bold; + color: black; +} + +/***************************************************** +Text and anchors used in the navigation menu +*****************************************************/ +.menuTitle { + font-weight: bold; + font-size: 20px; + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; + color: navy; +} + +.menuText { + font-size: 0.9em; + font-weight: bold; + color: #FFFFFF; +} + +a.menuTextLink:visited, a.menuTextLink:link { + font-size: 0.9em; + text-decoration: none; + color: #013DA4; +} + +a.menuTextLink:Hover { + color: #000000; +} + +/***************************************************** +Text and anchors used in the search +*****************************************************/ +.searchPager { + font-size: 0.9em; + font-weight: bold; +} + +.searchItem { + background-color: #DDEEFF; +} + +.searchAlternatingItem { + background-color: #FFFFFF; +} + +/***************************************************** +Default separator style for PostList +*****************************************************/ +td.flatViewSpacing { + height: 2px; + background-color: #80B7FF; +} + +/***************************************************** +Table Header and cell definitions +*****************************************************/ +th { + /* background-image: url(ForumC/skins/default/images/forumHeaderBackground.gif); */ + background-color: #6e99c9; +} + +td.forumHeaderBackgroundAlternate { + /* background-image: url(ForumC/skins/default/images/forumHeaderBackgroundAlternate.gif); */ + background-color: #BDD6F5; +} + +/***************************************************** +Body +*****************************************************/ +body { + FONT-SIZE: 8pt; + COLOR: #000000; + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; + scrollbar-face-color: #DEE3E7; + scrollbar-highlight-color: #FFFFFF; + scrollbar-shadow-color: #DEE3E7; + scrollbar-3dlight-color: #D1D7DC; + scrollbar-arrow-color: #006699; + scrollbar-track-color: #EFEFEF; + scrollbar-darkshadow-color: #98AAB1; +} + +/***************************************************** +Validation Text +*****************************************************/ +.validationWarningSmall { + color: Red; + font-size: 0.9em; +} + +/***************************************************** +General Text +*****************************************************/ +.normalTextSmall { + font-size: 1em; +} + +.CenterColumn a { + color: #0000FF; +} + +.CenterColumn a:visited { + color: #013DA4; +} + +.normalTextSmallBold { + font-size: 1em; + font-weight: bold; +} + +.normalTextSmaller { + font-size: 0.9em; +} + +.normalTextSmall, .normalTextSmallBold, .normalTextSmaller { + color: #000000; + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; +} + +.normalTextSmall a, .normalTextSmallBold a, .normalTextSmaller a { + color: #0000FF; + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; +} + +.normalTextSmall a:visited, .normalTextSmallBold a:visited, .normalTextSmaller a:visited { + color: #013DA4; + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; +} + +/***************************************************** +Text used on tables with a background +*****************************************************/ +.tableHeaderText { + color: white; + font-size: 11px; + padding: 5px; + font-weight: bold; + text-align: center; + font-family: Verdana, Helvetica, Arial, Sans-Serif; +} + +/***************************************************** +Border used around tables +*****************************************************/ +.tableBorder { + border: 1px #013DA4 solid; + background-color: #FFFFFF; +} + +/***************************************************** +Main forum colors +*****************************************************/ +td.forumRow { + background-color: #DDEEFF; +} + +td.forumAlternate { + background-color: #DAE7FD; +} + +/***************************************************** +Background color and text used in threaded view +*****************************************************/ +td.threadTitle { + background-color: #D4D9EC; +} + +.threadDetailTextSmall { + color: #0055E7; + font-size: 0.9em; +} + +.threadDetailTextSmallBold { + color: #0055E7; + font-size: 0.9em; + font-weight: bold; +} + +td.forumRowHighlight { + background-color: #dfe9fc; +} + +/***************************************************** +Text and links used in ForumGroupRepeater and ForumRepeater +*****************************************************/ +.forumTitle { + font-size: 1em; + font-weight: bold; + color: #013DA4; +} + +a.forumTitle:visited, a.forumTitle:link { + font-size: 1em; + font-weight: bold; + color: #013DA4; +} + +a.forumTitle:hover { + color: #DD6900; +} + +.forumName { + font-weight: bold; + font-size: 16px; + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; + text-decoration: none; + color: navy; +} + +a.forumName:hover { + color: #DD6900; + text-decoration: underline; +} + +/***************************************************** +Form Elements +*****************************************************/ +select { + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; + font-weight: bold; + background-color: #DAE7FD; + border-color: Black; +} + +textarea { + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; + background-color: White; + border-color: Black; +} + +/***************************************************** +Menu Controls +*****************************************************/ +A.linkMenuSink { + font-size: 0.9em; + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; + position: relative; +} + +TD.popupMenuSink { + position: relative; +} + +DIV.popupMenu { + border: 1px solid blue; +} + +DIV.popupTitle { + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; + color: white; + font-weight: bold; + background-color: #4455AA; +} + +DIV.popupItem { + font-size: 1em; + font-weight: bold; + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; + background-color: #DDEEFF; +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..65c7a4e Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.eot b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.eot new file mode 100644 index 0000000..d05ea58 Binary files /dev/null and b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.eot differ diff --git a/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.svg b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.svg new file mode 100644 index 0000000..4e48a46 --- /dev/null +++ b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.svg @@ -0,0 +1,3717 @@ + + + + +Created by FontForge 20201107 at Tue Mar 16 10:15:04 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.ttf b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.ttf new file mode 100644 index 0000000..fc567cd Binary files /dev/null and b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.ttf differ diff --git a/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.woff b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.woff new file mode 100644 index 0000000..db70e73 Binary files /dev/null and b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.woff differ diff --git a/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.woff2 b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.woff2 new file mode 100644 index 0000000..b8a8f65 Binary files /dev/null and b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-brands-400.woff2 differ diff --git a/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.eot b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.eot new file mode 100644 index 0000000..fae180d Binary files /dev/null and b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.eot differ diff --git a/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.svg b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.svg new file mode 100644 index 0000000..9dba8c3 --- /dev/null +++ b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.svg @@ -0,0 +1,801 @@ + + + + +Created by FontForge 20201107 at Tue Mar 16 10:15:04 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.ttf b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.ttf new file mode 100644 index 0000000..d1ac9ba Binary files /dev/null and b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.ttf differ diff --git a/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.woff b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.woff new file mode 100644 index 0000000..e9f54b1 Binary files /dev/null and b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.woff differ diff --git a/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.woff2 b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.woff2 new file mode 100644 index 0000000..9df490e Binary files /dev/null and b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-regular-400.woff2 differ diff --git a/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.eot b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.eot new file mode 100644 index 0000000..afe3152 Binary files /dev/null and b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.eot differ diff --git a/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.svg b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.svg new file mode 100644 index 0000000..dce459d --- /dev/null +++ b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.svg @@ -0,0 +1,5034 @@ + + + + +Created by FontForge 20201107 at Tue Mar 16 10:15:04 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.ttf b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.ttf new file mode 100644 index 0000000..f33e816 Binary files /dev/null and b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.ttf differ diff --git a/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.woff b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.woff new file mode 100644 index 0000000..73c1a4d Binary files /dev/null and b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.woff differ diff --git a/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.woff2 b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.woff2 new file mode 100644 index 0000000..dc52d95 Binary files /dev/null and b/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-solid-900.woff2 differ diff --git a/public/images/BuildSolo2.png b/public/images/BuildSolo2.png new file mode 100644 index 0000000..4ce2cb6 Binary files /dev/null and b/public/images/BuildSolo2.png differ diff --git a/public/images/BulletPointArrow.png b/public/images/BulletPointArrow.png new file mode 100644 index 0000000..f1e40a9 Binary files /dev/null and b/public/images/BulletPointArrow.png differ diff --git a/public/images/Facebook/fsignin.png b/public/images/Facebook/fsignin.png new file mode 100644 index 0000000..70d985e Binary files /dev/null and b/public/images/Facebook/fsignin.png differ diff --git a/public/images/GenreIcons/Classic.png b/public/images/GenreIcons/Classic.png new file mode 100644 index 0000000..7b40e53 Binary files /dev/null and b/public/images/GenreIcons/Classic.png differ diff --git a/public/images/GenreIconsInverted/Adventure.png b/public/images/GenreIconsInverted/Adventure.png new file mode 100644 index 0000000..f67d441 Binary files /dev/null and b/public/images/GenreIconsInverted/Adventure.png differ diff --git a/public/images/GenreIconsInverted/Castle.png b/public/images/GenreIconsInverted/Castle.png new file mode 100644 index 0000000..fcea2c6 Binary files /dev/null and b/public/images/GenreIconsInverted/Castle.png differ diff --git a/public/images/GenreIconsInverted/City.png b/public/images/GenreIconsInverted/City.png new file mode 100644 index 0000000..bb7812a Binary files /dev/null and b/public/images/GenreIconsInverted/City.png differ diff --git a/public/images/GenreIconsInverted/Classic.png b/public/images/GenreIconsInverted/Classic.png new file mode 100644 index 0000000..7b40e53 Binary files /dev/null and b/public/images/GenreIconsInverted/Classic.png differ diff --git a/public/images/GenreIconsInverted/Cthulu.png b/public/images/GenreIconsInverted/Cthulu.png new file mode 100644 index 0000000..9298a90 Binary files /dev/null and b/public/images/GenreIconsInverted/Cthulu.png differ diff --git a/public/images/GenreIconsInverted/LOL.png b/public/images/GenreIconsInverted/LOL.png new file mode 100644 index 0000000..c844b0b Binary files /dev/null and b/public/images/GenreIconsInverted/LOL.png differ diff --git a/public/images/GenreIconsInverted/ModernMilitary.png b/public/images/GenreIconsInverted/ModernMilitary.png new file mode 100644 index 0000000..642164c Binary files /dev/null and b/public/images/GenreIconsInverted/ModernMilitary.png differ diff --git a/public/images/GenreIconsInverted/Ninja.png b/public/images/GenreIconsInverted/Ninja.png new file mode 100644 index 0000000..dc84d49 Binary files /dev/null and b/public/images/GenreIconsInverted/Ninja.png differ diff --git a/public/images/GenreIconsInverted/Pirate.png b/public/images/GenreIconsInverted/Pirate.png new file mode 100644 index 0000000..876f9b9 Binary files /dev/null and b/public/images/GenreIconsInverted/Pirate.png differ diff --git a/public/images/GenreIconsInverted/SciFi.png b/public/images/GenreIconsInverted/SciFi.png new file mode 100644 index 0000000..91e4eba Binary files /dev/null and b/public/images/GenreIconsInverted/SciFi.png differ diff --git a/public/images/GenreIconsInverted/Skatepark.png b/public/images/GenreIconsInverted/Skatepark.png new file mode 100644 index 0000000..c7f27df Binary files /dev/null and b/public/images/GenreIconsInverted/Skatepark.png differ diff --git a/public/images/GenreIconsInverted/Sports.png b/public/images/GenreIconsInverted/Sports.png new file mode 100644 index 0000000..d423670 Binary files /dev/null and b/public/images/GenreIconsInverted/Sports.png differ diff --git a/public/images/GenreIconsInverted/Tutorial.gif b/public/images/GenreIconsInverted/Tutorial.gif new file mode 100644 index 0000000..682f416 Binary files /dev/null and b/public/images/GenreIconsInverted/Tutorial.gif differ diff --git a/public/images/GenreIconsInverted/WildWest.png b/public/images/GenreIconsInverted/WildWest.png new file mode 100644 index 0000000..dff8b66 Binary files /dev/null and b/public/images/GenreIconsInverted/WildWest.png differ diff --git a/public/images/Holiday3Button.png b/public/images/Holiday3Button.png new file mode 100644 index 0000000..6792756 Binary files /dev/null and b/public/images/Holiday3Button.png differ diff --git a/public/images/Play.png b/public/images/Play.png new file mode 100644 index 0000000..2efc15c Binary files /dev/null and b/public/images/Play.png differ diff --git a/public/images/PlayThis.png b/public/images/PlayThis.png new file mode 100644 index 0000000..ce3d0e2 Binary files /dev/null and b/public/images/PlayThis.png differ diff --git a/public/images/ProgressIndicator2.gif b/public/images/ProgressIndicator2.gif new file mode 100644 index 0000000..81488af Binary files /dev/null and b/public/images/ProgressIndicator2.gif differ diff --git a/public/images/ProgressIndicator3.gif b/public/images/ProgressIndicator3.gif new file mode 100644 index 0000000..e190b2e Binary files /dev/null and b/public/images/ProgressIndicator3.gif differ diff --git a/public/images/RandomFactsIcons/Admin.png b/public/images/RandomFactsIcons/Admin.png new file mode 100644 index 0000000..684d256 Binary files /dev/null and b/public/images/RandomFactsIcons/Admin.png differ diff --git a/public/images/RandomFactsIcons/Bux.png b/public/images/RandomFactsIcons/Bux.png new file mode 100644 index 0000000..26cc888 Binary files /dev/null and b/public/images/RandomFactsIcons/Bux.png differ diff --git a/public/images/RandomFactsIcons/House.png b/public/images/RandomFactsIcons/House.png new file mode 100644 index 0000000..7d45919 Binary files /dev/null and b/public/images/RandomFactsIcons/House.png differ diff --git a/public/images/RandomFactsIcons/Pants.png b/public/images/RandomFactsIcons/Pants.png new file mode 100644 index 0000000..58ea718 Binary files /dev/null and b/public/images/RandomFactsIcons/Pants.png differ diff --git a/public/images/RandomFactsIcons/Shield.png b/public/images/RandomFactsIcons/Shield.png new file mode 100644 index 0000000..a097aa9 Binary files /dev/null and b/public/images/RandomFactsIcons/Shield.png differ diff --git a/public/images/RandomFactsIcons/Shirt.png b/public/images/RandomFactsIcons/Shirt.png new file mode 100644 index 0000000..335b608 Binary files /dev/null and b/public/images/RandomFactsIcons/Shirt.png differ diff --git a/public/images/RandomFactsIcons/ShoppingBag.png b/public/images/RandomFactsIcons/ShoppingBag.png new file mode 100644 index 0000000..7489a10 Binary files /dev/null and b/public/images/RandomFactsIcons/ShoppingBag.png differ diff --git a/public/images/SalesPitcher/PlayNow3.png b/public/images/SalesPitcher/PlayNow3.png new file mode 100644 index 0000000..5688135 Binary files /dev/null and b/public/images/SalesPitcher/PlayNow3.png differ diff --git a/public/images/TrusteVertical.png b/public/images/TrusteVertical.png new file mode 100644 index 0000000..22502c6 Binary files /dev/null and b/public/images/TrusteVertical.png differ diff --git a/public/images/abuse.png b/public/images/abuse.png new file mode 100644 index 0000000..6f6abba Binary files /dev/null and b/public/images/abuse.png differ diff --git a/public/images/arrow36px_leftOn.png b/public/images/arrow36px_leftOn.png new file mode 100644 index 0000000..66106b8 Binary files /dev/null and b/public/images/arrow36px_leftOn.png differ diff --git a/public/images/arrow36px_rightOn.png b/public/images/arrow36px_rightOn.png new file mode 100644 index 0000000..1f733d1 Binary files /dev/null and b/public/images/arrow36px_rightOn.png differ diff --git a/public/images/arrow_36px_left.png b/public/images/arrow_36px_left.png new file mode 100644 index 0000000..7a0c286 Binary files /dev/null and b/public/images/arrow_36px_left.png differ diff --git a/public/images/arrow_36px_right.png b/public/images/arrow_36px_right.png new file mode 100644 index 0000000..bf74fbf Binary files /dev/null and b/public/images/arrow_36px_right.png differ diff --git a/public/images/asset-loading.gif b/public/images/asset-loading.gif new file mode 100644 index 0000000..c58609f Binary files /dev/null and b/public/images/asset-loading.gif differ diff --git a/public/images/assetIcons/limited.png b/public/images/assetIcons/limited.png new file mode 100644 index 0000000..74cdb55 Binary files /dev/null and b/public/images/assetIcons/limited.png differ diff --git a/public/images/assetIcons/limitedunique.png b/public/images/assetIcons/limitedunique.png new file mode 100644 index 0000000..cb15906 Binary files /dev/null and b/public/images/assetIcons/limitedunique.png differ diff --git a/public/images/bbbseal1US.gif b/public/images/bbbseal1US.gif new file mode 100644 index 0000000..8005800 Binary files /dev/null and b/public/images/bbbseal1US.gif differ diff --git a/public/images/bg_clouds.jpg b/public/images/bg_clouds.jpg new file mode 100644 index 0000000..cedee3f Binary files /dev/null and b/public/images/bg_clouds.jpg differ diff --git a/public/images/buttons/playNow01.png b/public/images/buttons/playNow01.png new file mode 100644 index 0000000..e3c4f23 Binary files /dev/null and b/public/images/buttons/playNow01.png differ diff --git a/public/images/css/WoodBanner.png b/public/images/css/WoodBanner.png new file mode 100644 index 0000000..e575d8a Binary files /dev/null and b/public/images/css/WoodBanner.png differ diff --git a/public/images/css/bkg.jpg b/public/images/css/bkg.jpg new file mode 100644 index 0000000..3966c30 Binary files /dev/null and b/public/images/css/bkg.jpg differ diff --git a/public/images/css/btn_blue18h.png b/public/images/css/btn_blue18h.png new file mode 100644 index 0000000..79f393b Binary files /dev/null and b/public/images/css/btn_blue18h.png differ diff --git a/public/images/css/btn_play_54h.png b/public/images/css/btn_play_54h.png new file mode 100644 index 0000000..605c9b4 Binary files /dev/null and b/public/images/css/btn_play_54h.png differ diff --git a/public/images/css/containerBkg_01.png b/public/images/css/containerBkg_01.png new file mode 100644 index 0000000..bd7301f Binary files /dev/null and b/public/images/css/containerBkg_01.png differ diff --git a/public/images/css/head_03.png b/public/images/css/head_03.png new file mode 100644 index 0000000..6dad545 Binary files /dev/null and b/public/images/css/head_03.png differ diff --git a/public/images/css/head_bkg_t1.png b/public/images/css/head_bkg_t1.png new file mode 100644 index 0000000..418ecdd Binary files /dev/null and b/public/images/css/head_bkg_t1.png differ diff --git a/public/images/css/head_bkg_t2.png b/public/images/css/head_bkg_t2.png new file mode 100644 index 0000000..0a2aef5 Binary files /dev/null and b/public/images/css/head_bkg_t2.png differ diff --git a/public/images/css/head_infobox_icons.png b/public/images/css/head_infobox_icons.png new file mode 100644 index 0000000..9a1dc2d Binary files /dev/null and b/public/images/css/head_infobox_icons.png differ diff --git a/public/images/css/head_sign.png b/public/images/css/head_sign.png new file mode 100644 index 0000000..d55655f Binary files /dev/null and b/public/images/css/head_sign.png differ diff --git a/public/images/css/old_head_03.jpg b/public/images/css/old_head_03.jpg new file mode 100644 index 0000000..a10b181 Binary files /dev/null and b/public/images/css/old_head_03.jpg differ diff --git a/public/images/css/standardBox_01_bkg.png b/public/images/css/standardBox_01_bkg.png new file mode 100644 index 0000000..aaec991 Binary files /dev/null and b/public/images/css/standardBox_01_bkg.png differ diff --git a/public/images/css/tab_black_33h_t1.png b/public/images/css/tab_black_33h_t1.png new file mode 100644 index 0000000..8c9e1e9 Binary files /dev/null and b/public/images/css/tab_black_33h_t1.png differ diff --git a/public/images/css/tab_black_33h_t2.png b/public/images/css/tab_black_33h_t2.png new file mode 100644 index 0000000..09da70e Binary files /dev/null and b/public/images/css/tab_black_33h_t2.png differ diff --git a/public/images/css/tab_white19h_l.gif b/public/images/css/tab_white19h_l.gif new file mode 100644 index 0000000..fc6919b Binary files /dev/null and b/public/images/css/tab_white19h_l.gif differ diff --git a/public/images/css/tab_white19h_r.gif b/public/images/css/tab_white19h_r.gif new file mode 100644 index 0000000..cf01cc1 Binary files /dev/null and b/public/images/css/tab_white19h_r.gif differ diff --git a/public/images/css/tab_white_26h_t1.png b/public/images/css/tab_white_26h_t1.png new file mode 100644 index 0000000..61a28fd Binary files /dev/null and b/public/images/css/tab_white_26h_t1.png differ diff --git a/public/images/css/tab_white_26h_t2.png b/public/images/css/tab_white_26h_t2.png new file mode 100644 index 0000000..a40695f Binary files /dev/null and b/public/images/css/tab_white_26h_t2.png differ diff --git a/public/images/css/tab_white_31h_t1.png b/public/images/css/tab_white_31h_t1.png new file mode 100644 index 0000000..f154c26 Binary files /dev/null and b/public/images/css/tab_white_31h_t1.png differ diff --git a/public/images/css/tab_white_31h_t2.png b/public/images/css/tab_white_31h_t2.png new file mode 100644 index 0000000..d9e2c5c Binary files /dev/null and b/public/images/css/tab_white_31h_t2.png differ diff --git a/public/images/css/topNav_blue.png b/public/images/css/topNav_blue.png new file mode 100644 index 0000000..58000a3 Binary files /dev/null and b/public/images/css/topNav_blue.png differ diff --git a/public/images/currency.png b/public/images/currency.png new file mode 100644 index 0000000..c4355fb Binary files /dev/null and b/public/images/currency.png differ diff --git a/public/images/gamesPage_filterarrow.png b/public/images/gamesPage_filterarrow.png new file mode 100644 index 0000000..485904d Binary files /dev/null and b/public/images/gamesPage_filterarrow.png differ diff --git a/public/images/icons/exclamation.png b/public/images/icons/exclamation.png new file mode 100644 index 0000000..c37bd06 Binary files /dev/null and b/public/images/icons/exclamation.png differ diff --git a/public/images/icons/overlay_bcOnly.png b/public/images/icons/overlay_bcOnly.png new file mode 100644 index 0000000..4577950 Binary files /dev/null and b/public/images/icons/overlay_bcOnly.png differ diff --git a/public/images/icons/overlay_obcOnly.png b/public/images/icons/overlay_obcOnly.png new file mode 100644 index 0000000..141d161 Binary files /dev/null and b/public/images/icons/overlay_obcOnly.png differ diff --git a/public/images/icons/overlay_tbcOnly.png b/public/images/icons/overlay_tbcOnly.png new file mode 100644 index 0000000..1e13f04 Binary files /dev/null and b/public/images/icons/overlay_tbcOnly.png differ diff --git a/public/images/offline.png b/public/images/offline.png new file mode 100644 index 0000000..a4613cc Binary files /dev/null and b/public/images/offline.png differ diff --git a/public/images/online.png b/public/images/online.png new file mode 100644 index 0000000..83fe7e1 Binary files /dev/null and b/public/images/online.png differ diff --git a/public/images/placeholder.png b/public/images/placeholder.png new file mode 100644 index 0000000..ff1ed37 Binary files /dev/null and b/public/images/placeholder.png differ diff --git a/public/images/placeholdergame.png b/public/images/placeholdergame.png new file mode 100644 index 0000000..e38de97 Binary files /dev/null and b/public/images/placeholdergame.png differ diff --git a/public/images/searchIcon.png b/public/images/searchIcon.png new file mode 100644 index 0000000..1e5a790 Binary files /dev/null and b/public/images/searchIcon.png differ diff --git a/public/images/site/background.jpg b/public/images/site/background.jpg new file mode 100644 index 0000000..c2e24e6 Binary files /dev/null and b/public/images/site/background.jpg differ diff --git a/public/images/site/download/img1.png b/public/images/site/download/img1.png new file mode 100644 index 0000000..d25f9e1 Binary files /dev/null and b/public/images/site/download/img1.png differ diff --git a/public/images/site/download/img2.png b/public/images/site/download/img2.png new file mode 100644 index 0000000..8782e7b Binary files /dev/null and b/public/images/site/download/img2.png differ diff --git a/public/images/site/download/img3.png b/public/images/site/download/img3.png new file mode 100644 index 0000000..e351179 Binary files /dev/null and b/public/images/site/download/img3.png differ diff --git a/public/images/site/offline.png b/public/images/site/offline.png new file mode 100644 index 0000000..b4eb143 Binary files /dev/null and b/public/images/site/offline.png differ diff --git a/public/images/site/online.png b/public/images/site/online.png new file mode 100644 index 0000000..e62ee3b Binary files /dev/null and b/public/images/site/online.png differ diff --git a/public/images/star.png b/public/images/star.png new file mode 100644 index 0000000..b88c857 Binary files /dev/null and b/public/images/star.png differ diff --git a/public/images/star_disabled.png b/public/images/star_disabled.png new file mode 100644 index 0000000..a600b00 Binary files /dev/null and b/public/images/star_disabled.png differ diff --git a/public/images/tadah-hd-nogradient.png b/public/images/tadah-hd-nogradient.png new file mode 100644 index 0000000..5759b0d Binary files /dev/null and b/public/images/tadah-hd-nogradient.png differ diff --git a/public/images/tadah-hd.png b/public/images/tadah-hd.png new file mode 100644 index 0000000..85b7514 Binary files /dev/null and b/public/images/tadah-hd.png differ diff --git a/public/images/tadahfull.png b/public/images/tadahfull.png new file mode 100644 index 0000000..d32e819 Binary files /dev/null and b/public/images/tadahfull.png differ diff --git a/public/images/tadaht.png b/public/images/tadaht.png new file mode 100644 index 0000000..dbe48ae Binary files /dev/null and b/public/images/tadaht.png differ diff --git a/public/images/topNav_arrow_white.png b/public/images/topNav_arrow_white.png new file mode 100644 index 0000000..4758e8c Binary files /dev/null and b/public/images/topNav_arrow_white.png differ diff --git a/public/images/topNav_black.png b/public/images/topNav_black.png new file mode 100644 index 0000000..670d054 Binary files /dev/null and b/public/images/topNav_black.png differ diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..66ea93c --- /dev/null +++ b/public/index.php @@ -0,0 +1,55 @@ +make(Kernel::class); + +$response = tap($kernel->handle( + $request = Request::capture() +))->send(); + +$kernel->terminate($request, $response); diff --git a/public/js/app.js b/public/js/app.js new file mode 100644 index 0000000..00540a5 --- /dev/null +++ b/public/js/app.js @@ -0,0 +1,172 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./resources/js/app.js": +/*!*****************************!*\ + !*** ./resources/js/app.js ***! + \*****************************/ +/***/ (() => { + +eval("function _typeof(obj) { \"@babel/helpers - typeof\"; 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\n//require('./bootstrap');\n; /// files: roblox.js, jquery.json-2.2.js, jquery.simplemodal-1.3.5.js, jquery.tipsy.js, AjaxAvatarThumbnail.js, extensions/string.js, StringTruncator.min.js, json2.min.js, webkit.js, GoogleAnalytics/GoogleAnalyticsEvents.js, MasterPageUI.js, jquery.cookie.js, jquery.jsoncookie.js, XsrfToken.js, RobloxEventManager.js, RobloxEventListener.js, KontagentEventListener.js, GoogleEventListener.js, MongoEventListener.js, SearchVisionListener.js, SiteTouchEvent.js, JSErrorTracker.js, Studio2Alert.js, ClientInstaller.js, InstallationInstructions.js, MadStatus.js, PlaceLauncher.js, VideoPreRoll.js\n\n; /// roblox.js\n\n(function (n, t) {\n function p(n, i) {\n var r = i.split(\".\");\n\n for (i = r.shift(); r.length > 0; n = n[i], i = r.shift()) {\n if (n[i] === t) return t;\n }\n\n return n[i];\n }\n\n function k(n, i, r) {\n var u = i.split(\".\");\n\n for (i = u.shift(); u.length > 0; n = n[i], i = u.shift()) {\n n[i] === t && (n[i] = {});\n }\n\n n[i] = r;\n }\n\n function nt(n, t) {\n var i = f.createElement(\"link\");\n i.href = n, i.rel = \"stylesheet\", i.type = \"text/css\", u.parentNode.insertBefore(i, u), t();\n }\n\n function g(n, t) {\n var i = f.createElement(\"script\");\n i.type = \"text/javascript\", i.src = n, i.onload = i.onreadystatechange = function () {\n i.readyState && i.readyState != \"loaded\" && i.readyState != \"complete\" || (t(), i.onload = i.onreadystatechange = null);\n }, u.parentNode.insertBefore(i, u);\n }\n\n function d(n) {\n return n.split(\".\").pop().split(\"?\").shift();\n }\n\n function o(n) {\n return n.indexOf(\".js\") < 0 ? n : n.indexOf(r.modulePath) >= 0 ? n.split(r.modulePath).pop().split(\".js\").shift().replace(\"/\", \".\") : n;\n }\n\n function v(n) {\n var t, i;\n return t = n.indexOf(\".js\") >= 0 || n.indexOf(\".css\") >= 0 ? n : r.baseUrl + r.modulePath + n.replace(\".\", \"/\") + \".js\", i = r.versions[t] || 1, t + \"?v=\" + i;\n }\n\n function s(n) {\n for (var r, u = [], i = 0; i < n.length; i++) {\n r = p(Roblox, o(n[i])), r !== t && u.push(r);\n }\n\n return u;\n }\n\n function e(n) {\n var t = i[n];\n if (t.loaded && t.depsLoaded) while (t.listeners.length > 0) {\n t.listeners.shift()();\n }\n }\n\n function a(n, u) {\n var f, s, h;\n if (!b(n) || r.externalResources.toString().indexOf(n) >= 0) return u();\n f = o(n), i[f] === t ? (i[f] = {\n loaded: !1,\n depsLoaded: !0,\n listeners: []\n }, i[f].listeners.push(u), s = v(f), h = d(s) == \"css\" ? nt : g, h(s, function () {\n i[f].loaded = !0, e(f);\n })) : (i[f].listeners.push(u), e(f));\n }\n\n function h(n, t) {\n var r = n.shift(),\n i = n.length == 0 ? t : function () {\n h(n, t);\n };\n a(r, i);\n }\n\n function l(n, t) {\n c(n) || (n = [n]);\n\n var i = function i() {\n t.apply(null, s(n));\n };\n\n h(n.slice(0), i);\n }\n\n function y(n, t, r) {\n w(t) ? (r = t, t = []) : c(t) || (t = [t]), i[n] = i[n] || {\n loaded: !0,\n listeners: []\n }, i[n].depsLoaded = !1, i[n].listeners.unshift(function () {\n k(Roblox, n, r.apply(null, s(t)));\n }), l(t, function () {\n i[n].depsLoaded = !0, e(n);\n });\n }\n\n var f = n.document,\n u = f.getElementsByTagName(\"script\")[0],\n b = function b(n) {\n return typeof n == \"string\";\n },\n c = function c(n) {\n return Object.prototype.toString.call(n) == \"[object Array]\";\n },\n w = function w(n) {\n return Object.prototype.toString.call(n) == \"[object Function]\";\n },\n i = {},\n r = {\n baseUrl: \"/\",\n modulePath: \"js/modules/\",\n versions: {},\n externalResources: []\n };\n\n typeof Roblox == \"undefined\" && (Roblox = {}), Roblox.config = r, Roblox.require = l, Roblox.define = y;\n})(window);\n\n; /// jquery.json-2.2.js\n\n(function (n) {\n n.toJSON = function (t) {\n var s, o, p, h, f, e, r, v, c, a, u, l, i, y;\n if (_typeof(JSON) == \"object\" && JSON.stringify) return JSON.stringify(t);\n if (i = _typeof(t), t === null) return \"null\";\n if (i == \"undefined\") return undefined;\n if (i == \"number\" || i == \"boolean\") return t + \"\";\n if (i == \"string\") return n.quoteString(t);\n\n if (i == \"object\") {\n if (typeof t.toJSON == \"function\") return n.toJSON(t.toJSON());\n if (t.constructor === Date) return s = t.getUTCMonth() + 1, s < 10 && (s = \"0\" + s), o = t.getUTCDate(), o < 10 && (o = \"0\" + o), p = t.getUTCFullYear(), h = t.getUTCHours(), h < 10 && (h = \"0\" + h), f = t.getUTCMinutes(), f < 10 && (f = \"0\" + f), e = t.getUTCSeconds(), e < 10 && (e = \"0\" + e), r = t.getUTCMilliseconds(), r < 100 && (r = \"0\" + r), r < 10 && (r = \"0\" + r), '\"' + p + \"-\" + s + \"-\" + o + \"T\" + h + \":\" + f + \":\" + e + \".\" + r + 'Z\"';\n\n if (t.constructor === Array) {\n for (v = [], c = 0; c < t.length; c++) {\n v.push(n.toJSON(t[c]) || \"null\");\n }\n\n return \"[\" + v.join(\",\") + \"]\";\n }\n\n a = [];\n\n for (u in t) {\n if (i = _typeof(u), i == \"number\") l = '\"' + u + '\"';else if (i == \"string\") l = n.quoteString(u);else continue;\n typeof t[u] != \"function\" && (y = n.toJSON(t[u]), a.push(l + \":\" + y));\n }\n\n return \"{\" + a.join(\", \") + \"}\";\n }\n }, n.evalJSON = function (n) {\n return _typeof(JSON) == \"object\" && JSON.parse ? JSON.parse(n) : eval(\"(\" + n + \")\");\n }, n.secureEvalJSON = function (n) {\n if (_typeof(JSON) == \"object\" && JSON.parse) return JSON.parse(n);\n var t = n;\n if (t = t.replace(/\\\\[\"\\\\\\/bfnrtu]/g, \"@\"), t = t.replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, \"]\"), t = t.replace(/(?:^|:|,)(?:\\s*\\[)+/g, \"\"), /^[\\],:{}\\s]*$/.test(t)) return eval(\"(\" + n + \")\");\n throw new SyntaxError(\"Error parsing JSON, source is not valid.\");\n }, n.quoteString = function (n) {\n return n.match(t) ? '\"' + n.replace(t, function (n) {\n var t = i[n];\n return typeof t == \"string\" ? t : (t = n.charCodeAt(), \"\\\\u00\" + Math.floor(t / 16).toString(16) + (t % 16).toString(16));\n }) + '\"' : '\"' + n + '\"';\n };\n var t = /[\"\\\\\\x00-\\x1f\\x7f-\\x9f]/g,\n i = {\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n '\"': '\\\\\"',\n \"\\\\\": \"\\\\\\\\\"\n };\n})(jQuery);\n\n; /// jquery.simplemodal-1.3.5.js\n\n(function (n) {\n var i = n.browser.msie && parseInt(n.browser.version) == 6 && _typeof(window.XMLHttpRequest) != \"object\",\n r = !1,\n t = [];\n n.modal = function (t, i) {\n return n.modal.impl.init(t, i);\n }, n.modal.close = function () {\n n.modal.impl.close();\n }, n.fn.modal = function (t) {\n return n.modal.impl.init(this, t);\n }, n.modal.defaults = {\n appendTo: \"body\",\n focus: !0,\n opacity: 50,\n overlayId: \"simplemodal-overlay\",\n overlayCss: {},\n containerId: \"simplemodal-container\",\n containerCss: {},\n dataId: \"simplemodal-data\",\n dataCss: {},\n minHeight: null,\n minWidth: null,\n maxHeight: null,\n maxWidth: null,\n autoResize: !1,\n autoPosition: !0,\n zIndex: 1e3,\n close: !0,\n closeHTML: '',\n closeClass: \"simplemodal-close\",\n escClose: !0,\n overlayClose: !1,\n position: null,\n persist: !1,\n modal: !0,\n onOpen: null,\n onShow: null,\n onClose: null\n }, n.modal.impl = {\n o: null,\n d: {},\n init: function init(t, i) {\n var r = this;\n if (r.d.data) return !1;\n if (r.o = n.extend({}, n.modal.defaults, i), r.zIndex = r.o.zIndex, r.occb = !1, _typeof(t) == \"object\") t = t instanceof jQuery ? t : n(t), r.d.placeholder = !1, t.parent().parent().size() > 0 && (t.before(n(\"\").attr(\"id\", \"simplemodal-placeholder\").css({\n display: \"none\"\n })), r.d.placeholder = !0, r.display = t.css(\"display\"), r.o.persist || (r.d.orig = t.clone(!0)));else if (typeof t == \"string\" || typeof t == \"number\") t = n(\"
\").html(t);else return alert(\"SimpleModal Error: Unsupported data type: \" + _typeof(t)), r;\n return r.create(t), t = null, r.open(), n.isFunction(r.o.onShow) && r.o.onShow.apply(r, [r.d]), r;\n },\n create: function create(r) {\n var u = this;\n t = u.getDimensions(), u.o.modal && i && (u.d.iframe = n('').css(n.extend(u.o.iframeCss, {\n display: \"none\",\n opacity: 0,\n position: \"fixed\",\n height: t[0],\n width: t[1],\n zIndex: u.o.zIndex,\n top: 0,\n left: 0\n })).appendTo(u.o.appendTo)), u.d.overlay = n(\"
\").attr(\"id\", u.o.overlayId).addClass(\"simplemodal-overlay\").css(n.extend(u.o.overlayCss, {\n display: \"none\",\n opacity: u.o.opacity / 100,\n height: u.o.modal ? t[0] : 0,\n width: u.o.modal ? t[1] : 0,\n position: \"fixed\",\n left: 0,\n top: 0,\n zIndex: u.o.zIndex + 1\n })).appendTo(u.o.appendTo), u.d.container = n(\"
\").attr(\"id\", u.o.containerId).addClass(\"simplemodal-container\").css(n.extend(u.o.containerCss, {\n display: \"none\",\n position: \"fixed\",\n zIndex: u.o.zIndex + 2\n })).append(u.o.close && u.o.closeHTML ? n(u.o.closeHTML).addClass(u.o.closeClass) : \"\").appendTo(u.o.appendTo), u.d.wrap = n(\"
\").attr(\"tabIndex\", -1).addClass(\"simplemodal-wrap\").css({\n height: \"100%\",\n outline: 0,\n width: \"100%\",\n overflow: \"visible\"\n }).appendTo(u.d.container), u.d.data = r.attr(\"id\", r.attr(\"id\") || u.o.dataId).addClass(\"simplemodal-data\").css(n.extend(u.o.dataCss, {\n display: \"none\"\n })).appendTo(\"body\"), r = null, u.setContainerDimensions(), u.d.data.appendTo(u.d.wrap), i && u.fixIE();\n },\n bindEvents: function bindEvents() {\n var r = this;\n n(\".\" + r.o.closeClass).bind(\"click.simplemodal\", function (n) {\n n.preventDefault(), r.close();\n }), r.o.modal && r.o.close && r.o.overlayClose && r.d.overlay.bind(\"click.simplemodal\", function (n) {\n n.preventDefault(), r.close();\n }), n(document).bind(\"keydown.simplemodal\", function (n) {\n r.o.modal && r.o.focus && n.keyCode == 9 ? r.watchTab(n) : r.o.close && r.o.escClose && n.keyCode == 27 && (n.preventDefault(), r.close());\n }), n(window).bind(\"resize.simplemodal\", function () {\n t = r.getDimensions(), r.setContainerDimensions(!0), i ? r.fixIE() : r.o.modal && (r.d.iframe && r.d.iframe.css({\n height: t[0],\n width: t[1]\n }), r.d.overlay.css({\n height: t[0],\n width: t[1]\n }));\n });\n },\n unbindEvents: function unbindEvents() {\n n(\".\" + this.o.closeClass).unbind(\"click.simplemodal\"), n(document).unbind(\"keydown.simplemodal\"), n(window).unbind(\"resize.simplemodal\"), this.d.overlay.unbind(\"click.simplemodal\");\n },\n fixIE: function fixIE() {\n var i = this,\n t = i.o.position;\n n.each([i.d.iframe || null, i.o.modal ? i.d.overlay : null, i.d.container], function (n, i) {\n var l, c, o, e;\n\n if (i) {\n var s = \"document.body.clientHeight\",\n h = \"document.body.clientWidth\",\n b = \"document.body.scrollHeight\",\n a = \"document.body.scrollLeft\",\n v = \"document.body.scrollTop\",\n p = \"document.body.scrollWidth\",\n y = \"document.documentElement.clientHeight\",\n w = \"document.documentElement.clientWidth\",\n u = \"document.documentElement.scrollLeft\",\n f = \"document.documentElement.scrollTop\",\n r = i[0].style;\n r.position = \"absolute\", n < 2 ? (r.removeExpression(\"height\"), r.removeExpression(\"width\"), r.setExpression(\"height\", \"\" + b + \" > \" + s + \" ? \" + b + \" : \" + s + ' + \"px\"'), r.setExpression(\"width\", \"\" + p + \" > \" + h + \" ? \" + p + \" : \" + h + ' + \"px\"')) : (t && t.constructor == Array ? (o = t[0] ? typeof t[0] == \"number\" ? t[0].toString() : t[0].replace(/px/, \"\") : i.css(\"top\").replace(/px/, \"\"), l = o.indexOf(\"%\") == -1 ? o + \" + (t = \" + f + \" ? \" + f + \" : \" + v + ') + \"px\"' : parseInt(o.replace(/%/, \"\")) + \" * ((\" + y + \" || \" + s + \") / 100) + (t = \" + f + \" ? \" + f + \" : \" + v + ') + \"px\"', t[1] && (e = typeof t[1] == \"number\" ? t[1].toString() : t[1].replace(/px/, \"\"), c = e.indexOf(\"%\") == -1 ? e + \" + (t = \" + u + \" ? \" + u + \" : \" + a + ') + \"px\"' : parseInt(e.replace(/%/, \"\")) + \" * ((\" + w + \" || \" + h + \") / 100) + (t = \" + u + \" ? \" + u + \" : \" + a + ') + \"px\"')) : (l = \"(\" + y + \" || \" + s + \") / 2 - (this.offsetHeight / 2) + (t = \" + f + \" ? \" + f + \" : \" + v + ') + \"px\"', c = \"(\" + w + \" || \" + h + \") / 2 - (this.offsetWidth / 2) + (t = \" + u + \" ? \" + u + \" : \" + a + ') + \"px\"'), r.removeExpression(\"top\"), r.removeExpression(\"left\"), r.setExpression(\"top\", l), r.setExpression(\"left\", c));\n }\n });\n },\n focus: function focus(t) {\n var r = this,\n u = t || \"first\",\n i = n(\":input:enabled:visible:\" + u, r.d.wrap);\n i.length > 0 ? i.focus() : r.d.wrap.focus();\n },\n getDimensions: function getDimensions() {\n var t = n(window),\n i = n.browser.opera && n.browser.version > \"9.5\" && n.fn.jquery <= \"1.2.6\" ? document.documentElement.clientHeight : n.browser.opera && n.browser.version < \"9.5\" && n.fn.jquery > \"1.2.6\" ? window.innerHeight : t.height();\n return [i, t.width()];\n },\n getVal: function getVal(n) {\n return n == \"auto\" ? 0 : n.indexOf(\"%\") > 0 ? n : parseInt(n.replace(/px/, \"\"));\n },\n setContainerDimensions: function setContainerDimensions(i) {\n var r = this;\n\n if (!i || i && r.o.autoResize) {\n var f = n.browser.opera ? r.d.container.height() : r.getVal(r.d.container.css(\"height\")),\n u = n.browser.opera ? r.d.container.width() : r.getVal(r.d.container.css(\"width\")),\n s = r.d.data.outerHeight(!0),\n h = r.d.data.outerWidth(!0),\n e = r.o.maxHeight && r.o.maxHeight < t[0] ? r.o.maxHeight : t[0],\n o = r.o.maxWidth && r.o.maxWidth < t[1] ? r.o.maxWidth : t[1];\n f = f ? f > e ? e : f : s ? s > e ? e : s < r.o.minHeight ? r.o.minHeight : s : r.o.minHeight, u = u ? u > o ? o : u : h ? h > o ? o : h < r.o.minWidth ? r.o.minWidth : h : r.o.minWidth, r.d.container.css({\n height: f,\n width: u\n });\n }\n\n r.o.autoPosition && r.setPosition();\n },\n setPosition: function setPosition() {\n var n = this,\n r,\n i,\n f = t[0] / 2 - n.d.container.outerHeight(!0) / 2,\n u = t[1] / 2 - n.d.container.outerWidth(!0) / 2;\n n.o.position && Object.prototype.toString.call(n.o.position) === \"[object Array]\" ? (r = n.o.position[0] || f, i = n.o.position[1] || u) : (r = f, i = u), n.d.container.css({\n left: i,\n top: r\n });\n },\n watchTab: function watchTab(t) {\n var i = this,\n r;\n n(t.target).parents(\".simplemodal-container\").length > 0 ? (i.inputs = n(\":input:enabled:visible:first, :input:enabled:visible:last\", i.d.data[0]), (!t.shiftKey && t.target == i.inputs[i.inputs.length - 1] || t.shiftKey && t.target == i.inputs[0] || i.inputs.length == 0) && (t.preventDefault(), r = t.shiftKey ? \"last\" : \"first\", setTimeout(function () {\n i.focus(r);\n }, 10))) : (t.preventDefault(), setTimeout(function () {\n i.focus();\n }, 10));\n },\n open: function open() {\n var t = this;\n t.d.iframe && t.d.iframe.show(), n.isFunction(t.o.onOpen) ? t.o.onOpen.apply(t, [t.d]) : (t.d.overlay.show(), t.d.container.show(), t.d.data.show()), t.focus(), t.bindEvents();\n },\n close: function close() {\n var t = this,\n i;\n if (!t.d.data) return !1;\n t.unbindEvents(), n.isFunction(t.o.onClose) && !t.occb ? (t.occb = !0, t.o.onClose.apply(t, [t.d])) : (t.d.placeholder ? (i = n(\"#simplemodal-placeholder\"), t.o.persist ? i.replaceWith(t.d.data.removeClass(\"simplemodal-data\").css(\"display\", t.display)) : (t.d.data.hide().remove(), i.replaceWith(t.d.orig))) : t.d.data.hide().remove(), t.d.container.hide().remove(), t.d.overlay.hide().remove(), t.d.iframe && t.d.iframe.hide().remove(), t.d = {});\n }\n };\n})(jQuery);\n\n; /// jquery.tipsy.js\n\n(function (n) {\n n.fn.tipsy = function (t) {\n return t = n.extend({}, n.fn.tipsy.defaults, t), this.each(function () {\n var i = n.fn.tipsy.elementOptions(this, t);\n n(this).hover(function () {\n var t, e, r;\n n.data(this, \"cancel.tipsy\", !0), t = n.data(this, \"active.tipsy\"), t || (t = n('
'), t.css({\n position: \"absolute\",\n zIndex: 999999\n }), n.data(this, \"active.tipsy\", t)), (n(this).attr(\"title\") || typeof n(this).attr(\"original-title\") != \"string\") && n(this).attr(\"original-title\", n(this).attr(\"title\") || \"\").removeAttr(\"title\"), typeof i.title == \"string\" ? e = n(this).attr(i.title == \"title\" ? \"original-title\" : i.title) : typeof i.title == \"function\" && (e = i.title.call(this)), t.find(\".tipsy-inner\")[i.html ? \"html\" : \"text\"](e || i.fallback), r = n.extend({}, n(this).offset(), {\n width: this.offsetWidth,\n height: this.offsetHeight\n }), t.get(0).className = \"tipsy\", t.remove().css({\n top: 0,\n left: 0,\n visibility: \"hidden\",\n display: \"block\"\n }).appendTo(document.body);\n var f = t[0].offsetWidth,\n u = t[0].offsetHeight,\n o = typeof i.gravity == \"function\" ? i.gravity.call(this) : i.gravity;\n\n switch (o.charAt(0)) {\n case \"n\":\n t.css({\n top: r.top + r.height,\n left: r.left + r.width / 2 - f / 2\n }).addClass(\"tipsy-north\");\n break;\n\n case \"s\":\n t.css({\n top: r.top - u,\n left: r.left + r.width / 2 - f / 2\n }).addClass(\"tipsy-south\");\n break;\n\n case \"e\":\n t.css({\n top: r.top + r.height / 2 - u / 2,\n left: r.left - f\n }).addClass(\"tipsy-east\");\n break;\n\n case \"w\":\n t.css({\n top: r.top + r.height / 2 - u / 2,\n left: r.left + r.width\n }).addClass(\"tipsy-west\");\n }\n\n i.fade ? t.css({\n opacity: 0,\n display: \"block\",\n visibility: \"visible\"\n }).animate({\n opacity: .8\n }) : t.css({\n visibility: \"visible\"\n });\n }, function () {\n n.data(this, \"cancel.tipsy\", !1);\n var t = this;\n setTimeout(function () {\n if (!n.data(this, \"cancel.tipsy\")) {\n var r = n.data(t, \"active.tipsy\");\n i.fade ? r.stop().fadeOut(function () {\n n(this).remove();\n }) : r.remove();\n }\n }, 100);\n });\n });\n }, n.fn.tipsy.elementOptions = function (t, i) {\n return n.metadata ? n.extend({}, i, n(t).metadata()) : i;\n }, n.fn.tipsy.defaults = {\n fade: !1,\n fallback: \"\",\n gravity: \"n\",\n html: !1,\n title: \"title\"\n }, n.fn.tipsy.autoNS = function () {\n return n(this).offset().top > n(document).scrollTop() + n(window).height() / 2 ? \"s\" : \"n\";\n }, n.fn.tipsy.autoWE = function () {\n return n(this).offset().left > n(document).scrollLeft() + n(window).width() / 2 ? \"e\" : \"w\";\n };\n})(jQuery);\n\n; /// AjaxAvatarThumbnail.js\n\nvar RobloxThumbs = function () {\n function n(t, i, r) {\n $.get(\"/thumbs/rawavatar.ashx\", {\n UserID: i,\n ThumbnailFormatID: r\n }, function (u) {\n u == \"PENDING\" ? window.setTimeout(function () {\n n(t, i, r);\n }, 3e3) : u.substring(5, 0) == \"ERROR\" || $(\"#\" + t).attr(\"src\", u);\n });\n }\n\n return {\n GenerateAvatarThumb: function GenerateAvatarThumb(t, i, r) {\n $(\"#\" + t).attr(\"src\", \"/images/spinners/waiting.gif\"), n(t, i, r);\n }\n };\n}();\n\n; /// extensions/string.js\n\n$.extend(String.prototype, function () {\n function n() {\n return this.replace(/&/g, \"&\").replace(//g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\");\n }\n\n return {\n escapeHTML: n\n };\n}());\n; /// StringTruncator.min.js\n\nfunction InitStringTruncator() {\n isInitialized || (fitStringSpan = document.createElement(\"span\"), fitStringSpan.style.display = \"inline\", fitStringSpan.style.visibility = \"hidden\", fitStringSpan.style.padding = \"0px\", document.body.appendChild(fitStringSpan), isInitialized = !0);\n}\n\nfunction fitStringToWidth(n, t, i) {\n function f(n) {\n return n.replace(\"<\", \"<\").replace(\">\", \">\");\n }\n\n if (isInitialized || InitStringTruncator(), i && (fitStringSpan.className = i), i = f(n), fitStringSpan.innerHTML = i, fitStringSpan.offsetWidth > t) {\n for (var i = 0, r, u = n.length; r = u - i >> 1;) {\n r = i + r, fitStringSpan.innerHTML = f(n.substring(0, r)) + \"…\", fitStringSpan.offsetWidth > t ? u = r : i = r;\n }\n\n i = n.substring(0, i) + \"…\";\n }\n\n return i;\n}\n\nfunction fitStringToWidthSafe(n, t, i) {\n return n = fitStringToWidth(n, t, i), n.indexOf(\"…\") != -1 && (t = n.lastIndexOf(\" \"), t != -1 && t + 10 <= n.length && (n = n.substring(0, t + 2) + \"…\")), n;\n}\n\nvar isInitialized = !1,\n fitStringSpan = null;\n; /// json2.min.js\n\nvar JSON;\nJSON || (JSON = {}), function () {\n \"use strict\";\n\n function i(n) {\n return n < 10 ? \"0\" + n : n;\n }\n\n function f(n) {\n return o.lastIndex = 0, o.test(n) ? '\"' + n.replace(o, function (n) {\n var t = s[n];\n return typeof t == \"string\" ? t : \"\\\\u\" + (\"0000\" + n.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' : '\"' + n + '\"';\n }\n\n function r(i, e) {\n var c,\n l,\n h,\n a,\n v = n,\n s,\n o = e[i];\n o && _typeof(o) == \"object\" && typeof o.toJSON == \"function\" && (o = o.toJSON(i)), typeof t == \"function\" && (o = t.call(e, i, o));\n\n switch (_typeof(o)) {\n case \"string\":\n return f(o);\n\n case \"number\":\n return isFinite(o) ? String(o) : \"null\";\n\n case \"boolean\":\n case \"null\":\n return String(o);\n\n case \"object\":\n if (!o) return \"null\";\n\n if (n += u, s = [], Object.prototype.toString.apply(o) === \"[object Array]\") {\n for (a = o.length, c = 0; c < a; c += 1) {\n s[c] = r(c, o) || \"null\";\n }\n\n return h = s.length === 0 ? \"[]\" : n ? \"[\\n\" + n + s.join(\",\\n\" + n) + \"\\n\" + v + \"]\" : \"[\" + s.join(\",\") + \"]\", n = v, h;\n }\n\n if (t && _typeof(t) == \"object\") for (a = t.length, c = 0; c < a; c += 1) {\n l = t[c], typeof l == \"string\" && (h = r(l, o), h && s.push(f(l) + (n ? \": \" : \":\") + h));\n } else for (l in o) {\n Object.hasOwnProperty.call(o, l) && (h = r(l, o), h && s.push(f(l) + (n ? \": \" : \":\") + h));\n }\n return h = s.length === 0 ? \"{}\" : n ? \"{\\n\" + n + s.join(\",\\n\" + n) + \"\\n\" + v + \"}\" : \"{\" + s.join(\",\") + \"}\", n = v, h;\n }\n }\n\n typeof Date.prototype.toJSON != \"function\" && (Date.prototype.toJSON = function () {\n return isFinite(this.valueOf()) ? this.getUTCFullYear() + \"-\" + i(this.getUTCMonth() + 1) + \"-\" + i(this.getUTCDate()) + \"T\" + i(this.getUTCHours()) + \":\" + i(this.getUTCMinutes()) + \":\" + i(this.getUTCSeconds()) + \"Z\" : null;\n }, String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {\n return this.valueOf();\n });\n var e = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n o = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n n,\n u,\n s = {\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n '\"': '\\\\\"',\n \"\\\\\": \"\\\\\\\\\"\n },\n t;\n typeof JSON.stringify != \"function\" && (JSON.stringify = function (i, f, e) {\n var o;\n if (n = \"\", u = \"\", typeof e == \"number\") for (o = 0; o < e; o += 1) {\n u += \" \";\n } else typeof e == \"string\" && (u = e);\n if (t = f, f && typeof f != \"function\" && (_typeof(f) != \"object\" || typeof f.length != \"number\")) throw new Error(\"JSON.stringify\");\n return r(\"\", {\n \"\": i\n });\n }), typeof JSON.parse != \"function\" && (JSON.parse = function (n, t) {\n function r(n, i) {\n var f,\n e,\n u = n[i];\n if (u && _typeof(u) == \"object\") for (f in u) {\n Object.hasOwnProperty.call(u, f) && (e = r(u, f), e !== undefined ? u[f] = e : delete u[f]);\n }\n return t.call(n, i, u);\n }\n\n var i;\n if (n = String(n), e.lastIndex = 0, e.test(n) && (n = n.replace(e, function (n) {\n return \"\\\\u\" + (\"0000\" + n.charCodeAt(0).toString(16)).slice(-4);\n })), /^[\\],:{}\\s]*$/.test(n.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g, \"@\").replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, \"]\").replace(/(?:^|:|,)(?:\\s*\\[)+/g, \"\"))) return i = eval(\"(\" + n + \")\"), typeof t == \"function\" ? r({\n \"\": i\n }, \"\") : i;\n throw new SyntaxError(\"JSON.parse\");\n });\n}();\n; /// webkit.js\n\ntypeof Sys.Browser.WebKit == \"undefined\" && (Sys.Browser.WebKit = {}), navigator.userAgent.indexOf(\"WebKit/\") > -1 && (Sys.Browser.agent = Sys.Browser.WebKit, Sys.Browser.version = parseFloat(navigator.userAgent.match(/WebKit\\/(\\d+(\\.\\d+)?)/)[1]), Sys.Browser.name = \"WebKit\");\n; /// GoogleAnalytics/GoogleAnalyticsEvents.js\n\nvar GoogleAnalyticsEvents = new function () {\n this.FireEvent = function (n) {\n if ((typeof _gaq === \"undefined\" ? \"undefined\" : _typeof(_gaq)) != ( true ? \"undefined\" : 0)) {\n var i = [\"_trackEvent\"],\n t = [\"b._trackEvent\"];\n _gaq.push(i.concat(n)), _gaq.push(t.concat(n));\n }\n };\n}();\n; /// MasterPageUI.js\n\n$(function () {\n $(\".tooltip\").tipsy(), $(\".tooltip-top\").tipsy({\n gravity: \"s\"\n }), $(\".tooltip-right\").tipsy({\n gravity: \"w\"\n }), $(\".tooltip-left\").tipsy({\n gravity: \"e\"\n }), $(\".tooltip-bottom\").tipsy({\n gravity: \"n\"\n });\n}), typeof Roblox == \"undefined\" && (Roblox = {}), Roblox.FixedUI = function () {\n function s() {\n if (typeof pageYOffset != \"undefined\") return pageYOffset;\n var t = document.body,\n n = document.documentElement;\n return n = n.clientHeight ? n : t, n.scrollTop;\n }\n\n function e() {\n var n = s();\n t || (t = $(\"iframe.IframeAdHide\")), t.each(function () {\n var t = $(this).offset().top - 73;\n !r.gutterAdsEnabled && n >= t ? $(this).css(\"visibility\", \"hidden\") : $(this).css(\"visibility\", \"visible\");\n });\n }\n\n function i() {\n $(\"#Nav\").css(\"cssText\", \"position: static !important;width:970px !important\"), $(\"#SmallHeaderContainer\").css(\"cssText\", \"position: relative !important;height: 36px !important;width:970px !important\"), $(\".forceSpace\").css(\"cssText\", \"width: 970px !important; height:9px !important;padding-top: 0px !important;background:white\"), $(\"#Container\").css(\"cssText\", \"width: 970px !important\"), $(\".mySubmenuFixed\").css(\"cssText\", \"position: relative; top: 0px;\"), $(\"#MasterContainer\").css(\"cssText\", \"width: 970px !important\"), $(\".mySubmenuFixed\").length == 1 && ($(\".forceSpaceUnderSubmenu\").hide(), $(\".forceSpace\").css(\"cssText\", \"width: 910px !important; height:7px !important;padding-top: 0px !important;\")), $(window).unbind(\"scroll\");\n }\n\n function h() {\n $(\"#Nav\").css(\"cssText\", \"position: fixed !important;width:100% !important\"), $(\"#SmallHeaderContainer\").css(\"cssText\", \"position: fixed !important;height: 40px !important;width:100% !important\"), $(\".forceSpace\").css(\"cssText\", \"width: 100% !important; height:15px !important;padding-top: 62px !important;\"), $(\"#Container\").css(\"cssText\", \"width: 100% !important\"), $(\".mySubmenuFixed\").css(\"cssText\", \"position: fixed; top: 68px;\"), $(\"#MasterContainer\").css(\"cssText\", \"width: 100%\"), $(\".mySubmenuFixed\").length == 1 && $(\".forceSpaceUnderSubmenu\").show(), $(window).scroll(e);\n }\n\n function o() {\n var n = 1024;\n return document.body && document.body.offsetWidth && (n = document.body.offsetWidth), window.innerWidth && window.innerHeight && (n = window.innerWidth), n;\n }\n\n function u() {\n o() < 978 ? i() : h();\n }\n\n var n = navigator.userAgent.toLowerCase(),\n f = /mobile/i.test(n) || /ipad/i.test(n) || /iphone/i.test(n) || /android/i.test(n) || /playbook/i.test(n) || /blackberry/i.test(n),\n t,\n r;\n return $(function () {\n f ? i() : $(window).load(u).resize(u);\n }), t = null, r = {\n isMobile: f,\n gutterAdsEnabled: !1,\n unfixHeader: i\n };\n}();\n; /// jquery.cookie.js\n\njQuery.cookie = function (n, t, i) {\n var o, r, f, e, u, s;\n\n if (typeof t != \"undefined\") {\n i = i || {}, t === null && (t = \"\", i.expires = -1), o = \"\", i.expires && (typeof i.expires == \"number\" || i.expires.toUTCString) && (typeof i.expires == \"number\" ? (r = new Date(), r.setTime(r.getTime() + i.expires * 864e5)) : r = i.expires, o = \"; expires=\" + r.toUTCString());\n var h = i.path ? \"; path=\" + i.path : \"\",\n c = i.domain ? \"; domain=\" + i.domain : \"\",\n l = i.secure ? \"; secure\" : \"\";\n document.cookie = [n, \"=\", encodeURIComponent(t), o, h, c, l].join(\"\");\n } else {\n if (f = null, document.cookie && document.cookie != \"\") for (e = document.cookie.split(\";\"), u = 0; u < e.length; u++) {\n if (s = jQuery.trim(e[u]), s.substring(0, n.length + 1) == n + \"=\") {\n f = decodeURIComponent(s.substring(n.length + 1));\n break;\n }\n }\n return f;\n }\n};\n\n; /// jquery.jsoncookie.js\n\nfunction RobloxJSONCookie(n) {\n this._cookiename = n;\n}\n\n(function (n) {\n var t = function t(n) {\n return _typeof(n) == \"object\" && !(n instanceof Array) && n !== null;\n };\n\n n.extend({\n getJSONCookie: function getJSONCookie(t, i) {\n var r = n.cookie(t);\n return i ? r : r ? JSON.parse(r) : {};\n },\n setJSONCookie: function setJSONCookie(i, r, u) {\n var f = \"\";\n return u = n.extend({\n expires: 90,\n path: \"/\"\n }, u), f = t(r) ? JSON.stringify(r) : r, n.cookie(i, f, u);\n },\n removeJSONCookie: function removeJSONCookie(t) {\n return n.cookie(t, null);\n },\n JSONCookie: function JSONCookie(t, i, r) {\n return i && n.setJSONCookie(t, i, r), n.getJSONCookie(t);\n }\n });\n})(jQuery), RobloxJSONCookie.prototype = {\n Delete: function Delete() {\n return $.removeJSONCookie(this._cookiename);\n },\n SetObj: function SetObj(n, t) {\n return t || (t = {\n path: \"/\"\n }), $.JSONCookie(this._cookiename, n, t);\n },\n SetJSON: function SetJSON(n, t) {\n return t || (t = {\n path: \"/\"\n }), $.JSONCookie(this._cookiename, n, t);\n },\n GetObj: function GetObj() {\n var n = $.getJSONCookie(this._cookiename, !1);\n return n == null ? {} : n;\n },\n GetJSON: function GetJSON() {\n return $.getJSONCookie(this._cookiename, !0);\n }\n};\n; /// XsrfToken.js\n\ntypeof Roblox == \"undefined\" && (Roblox = {}), Roblox.XsrfToken = function () {\n function f(n) {\n var u, t;\n if (i.allUrlsEnabled) return !0;\n\n for (u = n.split(\"?\")[0].toLowerCase(), t = 0; t < r.length; t++) {\n if (r[t] === u) return !0;\n }\n\n return !1;\n }\n\n function e(n) {\n r.push(n.toLowerCase());\n }\n\n function o(t) {\n n = t;\n }\n\n function u() {\n return n;\n }\n\n var n = \"\",\n t = /(^|\\?|&)token=[^&]*/,\n r = [\"/chat/friendhandler.ashx\", \"/chat/party.ashx\", \"/chat/send.ashx\", \"/chat/utility.ashx\", \"/groups/rolesetupdater.ashx\", \"groups.aspx/exileuseranddeleteposts\", \"messageshandler.ashx\", \"emailupgrademe.ashx\", \"/services/usercheck.asmx/updatepersonalinfo\", \"/thumbs/assetmedia/placemediaitemsorthandler.ashx\"],\n i;\n return $.ajaxPrefilter(function (i) {\n var o, e;\n i.dataType != \"jsonp\" && i.dataType != \"script\" && n != \"\" && f(i.url) && (o = $.param({\n token: n\n }), t.test(i.url) || typeof i.data != \"undefined\" && t.test(i.data) || (i.url += /\\?/.test(i.url) ? \"&token=\" + encodeURIComponent(n) : \"?token=\" + encodeURIComponent(n)), e = i.error, i.error = function (r, u, f) {\n if (r.status == 420) {\n var o = r.getResponseHeader(\"Token\");\n\n if (o == null) {\n typeof e == \"function\" && e(r, u, f);\n throw new Error(\"Null token returned by Xsrf enabled handler\");\n }\n\n t.test(i.url) ? i.url = i.url.replace(t, \"$1token=\" + encodeURIComponent(o)) : i.data = i.data.replace(t, \"$1token=\" + encodeURIComponent(o)), $.ajax(i), n = o;\n } else typeof e == \"function\" && e(r, u, f);\n });\n }), i = {\n setToken: o,\n getToken: u,\n allUrlsEnabled: !1,\n addEnabledUrl: e\n };\n}();\n; /// RobloxEventManager.js\n\nfunction RBXBaseEventListener() {\n if (!(this instanceof RBXBaseEventListener)) return new RBXBaseEventListener();\n this.init = function () {\n for (eventKey in this.events) {\n $(document).bind(this.events[eventKey], $.proxy(this.localCopy, this));\n }\n }, this.events = [], this.localCopy = function (n, t) {\n var r = $.extend(!0, {}, n),\n i = $.extend(!0, {}, t);\n this.handleEvent(r, i);\n }, this.distillData = function () {\n return console.log(\"RBXEventListener distillData - Please implement me\"), !1;\n }, this.handleEvent = function () {\n return console.log(\"EventListener handleEvent - Please implement me\"), !1;\n }, this.fireEvent = function () {\n return console.log(\"EventListener fireEvent - Please implement me\"), !1;\n };\n}\n\nRobloxEventManager = new function () {\n function u(n) {\n var i = new RegExp(n + \"=([^;]*)\"),\n t = i.exec(document.cookie);\n return t ? t[1] : null;\n }\n\n function t(n) {\n for (var u = {}, r = n.split(\"&\"), i, t = 0; t < r.length; t++) {\n i = r[t].split(\"=\"), u[i[0]] = i[1];\n }\n\n return u;\n }\n\n function i(n) {\n var i = u(n);\n return i ? t(i) : null;\n }\n\n var n = [],\n r = {};\n this.enabled = !1, this.initialized = !1, this.eventQueue = [], this.initialize = function (n) {\n for (this.initialized = !0, this.enabled = n; this.eventQueue.length > 0;) {\n var t = this.eventQueue.pop();\n this.triggerEvent(t.eventName, t.args);\n }\n }, this.getMarketingGuid = function () {\n var n = i(\"RBXEventTracker\");\n return n != null ? n.browserid : -1;\n }, this.triggerEvent = function (n, t) {\n this.initialized ? this.enabled && (typeof t == \"undefined\" && (t = {}), t.guid = this.getMarketingGuid(), t.guid != -1 && $(document).trigger(n, [t])) : this.eventQueue.push({\n eventName: n,\n args: t\n });\n }, this.registerCookieStoreEvent = function (t) {\n n.push(t);\n }, this.insertDataStoreKeyValuePair = function (n, t) {\n r[n] = t;\n }, this.monitorCookieStore = function () {\n var i, u, f, t, r;\n\n try {\n if (typeof Roblox == \"undefined\" || typeof Roblox.Client == \"undefined\" || window.location.protocol == \"https:\") return;\n if (i = Roblox.Client.CreateLauncher(!1), i == null) return;\n\n for (u = 0; u < n.length; u++) {\n try {\n f = n[u], t = i.GetKeyValue(f), t != \"\" && t != \"-1\" && t != \"RBX_NOT_VALID\" && (r = eval(\"(\" + t + \")\"), r.userType = r.userId > 0 ? \"user\" : \"guest\", RobloxEventManager.triggerEvent(f, r), i.SetKeyValue(f, \"RBX_NOT_VALID\"));\n } catch (e) {}\n }\n\n Roblox.Client.ReleaseLauncher(i, !1, !1);\n } catch (e) {}\n };\n}();\n; /// RobloxEventListener.js\n\nRobloxListener = new RBXBaseEventListener(), RobloxListener.handleEvent = function (n, t) {\n var r, u, i;\n\n switch (n.type) {\n case \"rbx_evt_install_begin\":\n i = {\n guid: \"guid\",\n userId: \"userid\"\n }, r = n.type;\n break;\n\n case \"rbx_evt_initial_install_start\":\n i = {\n guid: \"guid\",\n userId: \"userid\"\n }, r = n.type;\n break;\n\n case \"rbx_evt_ftp\":\n i = {\n guid: \"guid\",\n userId: \"userid\"\n }, r = n.type;\n break;\n\n case \"rbx_evt_initial_install_success\":\n i = {\n guid: \"guid\",\n userId: \"userid\"\n }, r = n.type;\n break;\n\n case \"rbx_evt_fmp\":\n i = {\n guid: \"guid\",\n userId: \"userid\"\n }, r = n.type;\n break;\n\n default:\n return console.log(\"RobloxEventListener - Event registered without handling instructions: \" + n.type), !1;\n }\n\n return u = this.distillData(t, i), this.fireEvent(this.eventToString(r, u)), !0;\n}, RobloxListener.distillData = function (n, t) {\n var i = {};\n\n for (dataKey in t) {\n _typeof(n[dataKey]) != ( true ? \"undefined\" : 0) && (i[t[dataKey]] = encodeURIComponent(n[dataKey]));\n }\n\n return i;\n}, RobloxListener.eventToString = function (n, t) {\n var i = RobloxListener.restUrl;\n if (i += \"?event=\" + n + \"&\", t != null) for (arg in t) {\n (typeof arg === \"undefined\" ? \"undefined\" : _typeof(arg)) != ( true ? \"undefined\" : 0) && t.hasOwnProperty(arg) && (i += arg + \"=\" + t[arg] + \"&\");\n }\n return i = i.slice(0, i.length - 1);\n}, RobloxListener.fireEvent = function (n) {\n var t = $('');\n}, RobloxListener.events = [\"rbx_evt_install_begin\", \"rbx_evt_initial_install_start\", \"rbx_evt_ftp\", \"rbx_evt_initial_install_success\", \"rbx_evt_fmp\"];\n; /// KontagentEventListener.js\n\nKontagentListener = new RBXBaseEventListener(), KontagentListener.restUrl = \"\", KontagentListener.APIKey = \"\", KontagentListener.StagingAPIKey = \"\", KontagentListener.StagingEvents = [], KontagentListener.handleEvent = function (n, t) {\n function f(n) {\n return n = n.toLowerCase(), n == \"win32\" ? n = \"Windows\" : n == \"osx\" && (n = \"Mac\"), n;\n }\n\n var r, u, i, o, e;\n r = \"evt\";\n\n switch (n.type) {\n case \"rbx_evt_pageview\":\n i = {\n guid: \"s\",\n path: \"u\",\n ts: \"ts\",\n user_ip: \"ip\"\n }, r = \"pgr\";\n break;\n\n case \"rbx_evt_userinfo\":\n i = {\n guid: \"s\",\n age: \"b\",\n gender: \"g\"\n }, r = \"cpu\";\n break;\n\n case \"rbx_evt_ecomm_item\":\n t.total = Math.round(t.total * 100), t.productName = t.productName.replace(/\\s/g, \"\").replace(\"Outrageous\", \"O\").replace(\"Turbo\", \"T\").replace(\"Builders\", \"B\").replace(\"Club\", \"C\"), i = {\n guid: \"s\",\n total: \"v\",\n provider: \"st1\",\n category: \"st2\",\n productName: \"st3\",\n type: \"tu\"\n }, r = \"mtu\";\n break;\n\n case \"rbx_evt_ftp\":\n t.tracking = \"\", t.shorttracking = \"\", i = {\n guid: \"s\",\n trackingtag: \"u\",\n shorttracking: \"su\"\n }, u = this.distillData(t, i), r = \"apa\", this.fireEvent(this.eventToString(n.type, r, u)), t.eventName = \"Install Success Funnel\", t.eventType = \"Install Success Funnel\", t.os = f(t.os), i = {\n guid: \"s\",\n eventType: \"st1\",\n os: \"st2\",\n userType: \"st3\",\n eventName: \"n\"\n }, u = this.distillData(t, i), r = \"evt\", this.fireEvent(this.eventToString(n.type, r, u)), t.eventType = \"Install Success Place\", i = {\n guid: \"s\",\n eventType: \"st1\",\n os: \"st2\",\n userType: \"st3\",\n placeId: \"n\"\n };\n break;\n\n case \"rbx_evt_initial_install_success\":\n t.tracking = \"\", t.shorttracking = \"\", i = {\n guid: \"s\",\n trackingtag: \"u\",\n shorttracking: \"su\"\n }, u = this.distillData(t, i), r = \"apa\", this.fireEvent(this.eventToString(n.type, r, u)), t.eventName = \"Bootstrapper Install Success Funnel\", t.eventType = \"Bootstrapper Install Success Funnel\", t.os = f(t.os), i = {\n guid: \"s\",\n eventType: \"st1\",\n os: \"st2\",\n userType: \"st3\",\n eventName: \"n\"\n }, u = this.distillData(t, i), r = \"evt\", this.fireEvent(this.eventToString(n.type, r, u)), t.eventType = \"Bootstrapper Install Success Place\", i = {\n guid: \"s\",\n eventType: \"st1\",\n os: \"st2\",\n userType: \"st3\",\n placeId: \"n\"\n };\n break;\n\n case \"rbx_evt_install_begin\":\n t.eventName = \"Install Begin\", t.eventType = \"Install Begin\", i = {\n guid: \"s\",\n eventType: \"st1\",\n os: \"st2\",\n eventName: \"n\"\n };\n break;\n\n case \"rbx_evt_initial_install_start\":\n t.eventName = \"Bootstrapper Install Begin\", t.eventType = \"Bootstrapper Install Begin\", i = {\n guid: \"s\",\n eventType: \"st1\",\n os: \"st2\",\n eventName: \"n\"\n };\n break;\n\n case \"rbx_evt_fmp\":\n t.eventName = \"Five Minute Play Funnel\", t.eventType = \"Five Minute Play Funnel\", t.os = f(t.os), i = {\n guid: \"s\",\n eventType: \"st1\",\n os: \"st2\",\n userType: \"st3\",\n eventName: \"n\"\n }, u = this.distillData(t, i), this.fireEvent(this.eventToString(n.type, r, u)), t.eventType = \"Five Minute Play Place\", i = {\n guid: \"s\",\n eventType: \"st1\",\n os: \"st2\",\n userType: \"st3\",\n placeId: \"n\"\n };\n break;\n\n case \"rbx_evt_play_user\":\n t.eventName = \"Play User\", t.eventType = \"Play User\", t.gender = t.gender, i = {\n guid: \"s\",\n eventType: \"st1\",\n gender: \"st2\",\n age: \"st3\",\n placeId: \"l\",\n eventName: \"n\"\n };\n break;\n\n case \"rbx_evt_play_guest\":\n t.eventName = \"Play Guest\", t.eventType = \"Play Guest\", t.gender = t.gender, i = {\n guid: \"s\",\n eventType: \"st1\",\n gender: \"st2\",\n placeId: \"l\",\n eventName: \"n\"\n };\n break;\n\n case \"rbx_evt_signup\":\n t.eventName = \"Sign Up Funnel\", t.eventType = \"Sign Up Funnel\", i = {\n guid: \"s\",\n eventType: \"st1\",\n eventName: \"n\"\n }, u = this.distillData(t, i), r = \"evt\", this.fireEvent(this.eventToString(n.type, r, u)), t.eventName = \"Sign Up\", t.eventType = \"Sign Up\", t.gender = t.gender, i = {\n guid: \"s\",\n eventType: \"st1\",\n gender: \"st2\",\n age: \"st3\",\n eventName: \"n\"\n };\n break;\n\n case \"rbx_evt_ecomm_custom\":\n t.eventType = \"Purchase\", t.productName = t.productName.replace(/\\s/g, \"\").replace(\"Outrageous\", \"O\").replace(\"Turbo\", \"T\").replace(\"Builders\", \"B\").replace(\"Club\", \"C\"), i = {\n guid: \"s\",\n eventType: \"st1\",\n provider: \"st2\",\n category: \"st3\",\n productName: \"n\"\n };\n break;\n\n case \"rbx_evt_abtest\":\n i = {\n guid: \"s\",\n experiment: \"st1\",\n variation: \"n\"\n };\n break;\n\n case \"rbx_evt_pageview_custom\":\n t.eventName = t.page, i = typeof t.userType == \"undefined\" ? {\n guid: \"s\",\n page: \"st1\",\n eventName: \"n\"\n } : {\n guid: \"s\",\n page: \"st1\",\n userType: \"st2\",\n eventName: \"n\"\n };\n break;\n\n case \"rbx_evt_generic\":\n t.eventName = t.type, i = {\n guid: \"s\",\n type: \"st1\",\n eventName: \"n\"\n }, typeof t.opt1 != \"undefined\" && (i.opt1 = \"st2\"), typeof t.opt2 != \"undefined\" && typeof t.opt1 != \"undefined\" && (i.opt2 = \"st3\");\n break;\n\n case \"rbx_evt_source_tracking\":\n t.installed = 0, t.sourceType = \"ad\", i = {\n guid: \"s\",\n sourceType: \"tu\",\n installed: \"i\",\n source: \"st1\",\n campaign: \"st2\",\n medium: \"st3\"\n }, r = \"ucc\";\n break;\n\n case \"rbx_evt_card_redemption\":\n t.eventType = \"CardRedemption\", t.eventName = \"CardRedemption\", i = {\n guid: \"s\",\n eventType: \"st1\",\n merchant: \"st2\",\n cardValue: \"st3\",\n eventName: \"n\"\n };\n break;\n\n case \"rbx_evt_popup_action\":\n t.eventType = \"GuestPlayPopupAction\", t.eventName = \"GuestPlayPopupAction\", i = {\n guid: \"s\",\n eventType: \"st1\",\n action: \"st2\",\n eventName: \"n\"\n };\n break;\n\n default:\n return console.log(\"KontagentListener - Event registered without handling instructions: \" + n.type), !1;\n }\n\n return u = this.distillData(t, i), this.fireEvent(this.eventToString(n.type, r, u)), !0;\n}, KontagentListener.distillData = function (n, t) {\n var i = {};\n\n for (dataKey in t) {\n _typeof(n[dataKey]) != ( true ? \"undefined\" : 0) && (i[t[dataKey]] = encodeURIComponent(n[dataKey]));\n }\n\n return i;\n}, KontagentListener.eventToString = function (n, t, i) {\n var r = KontagentListener.restUrl,\n u = this.isStagingEvent(n, i) ? KontagentListener.StagingAPIKey : KontagentListener.APIKey;\n if (r += u + \"/\" + t + \"/?\", i != null) for (arg in i) {\n (typeof arg === \"undefined\" ? \"undefined\" : _typeof(arg)) != ( true ? \"undefined\" : 0) && i.hasOwnProperty(arg) && (r += arg + \"=\" + i[arg] + \"&\");\n }\n return r = r.slice(0, r.length - 1);\n}, KontagentListener.isStagingEvent = function (n, t) {\n var r, i;\n staging = !1;\n\n try {\n for (r in this.StagingEvents) {\n if (i = this.StagingEvents[r], typeof i == \"string\") {\n if (n == i) {\n staging = !0;\n break;\n }\n } else if (_typeof(i) == \"object\" && typeof i[n] != \"undefined\" && i[n] == t.st1) {\n staging = !0;\n break;\n }\n }\n } catch (u) {}\n\n return staging;\n}, KontagentListener.fireEvent = function (n) {\n var t = $('');\n}, KontagentListener.events = [\"rbx_evt_pageview\", \"rbx_evt_install_begin\", \"rbx_evt_initial_install_start\", \"rbx_evt_ftp\", \"rbx_evt_initial_install_success\", \"rbx_evt_fmp\", \"rbx_evt_play_user\", \"rbx_evt_play_guest\", \"rbx_evt_signup\", \"rbx_evt_ecomm_item\", \"rbx_evt_ecomm_custom\", \"rbx_evt_userinfo\", \"rbx_evt_abtest\", \"rbx_evt_pageview_custom\", \"rbx_evt_generic\", \"rbx_evt_source_tracking\", \"rbx_evt_card_redemption\", \"rbx_evt_popup_action\"];\n; /// GoogleEventListener.js\n\nGoogleListener = new RBXBaseEventListener(), GoogleListener.handleEvent = function (n, t) {\n function r(n) {\n return n = n.toLowerCase(), n == \"win32\" ? n = \"Windows\" : n == \"osx\" && (n = \"Mac\"), n;\n }\n\n var f, u, i;\n\n switch (n.type) {\n case \"rbx_evt_initial_install_begin\":\n t.os = r(t.os), t.category = \"Bootstrapper Install Begin\", i = {\n os: \"action\"\n };\n break;\n\n case \"rbx_evt_ftp\":\n t.os = r(t.os), t.category = \"Install Success\", i = {\n os: \"action\"\n };\n break;\n\n case \"rbx_evt_initial_install_success\":\n t.os = r(t.os), t.category = \"Bootstrapper Install Success\", i = {\n os: \"action\"\n };\n break;\n\n case \"rbx_evt_fmp\":\n t.os = r(t.os), t.category = \"Five Minute Play\", i = {\n os: \"action\"\n };\n break;\n\n case \"rbx_evt_abtest\":\n i = {\n experiment: \"category\",\n variation: \"action\",\n version: \"opt_label\"\n };\n break;\n\n case \"rbx_evt_card_redemption\":\n t.category = \"CardRedemption\", i = {\n merchant: \"action\",\n cardValue: \"opt_label\"\n };\n break;\n\n default:\n return console.log(\"GoogleListener - Event registered without handling instructions: \" + n.type), !1;\n }\n\n return i.category = \"category\", u = this.distillData(t, i), this.fireEvent(u), !0;\n}, GoogleListener.distillData = function (n, t) {\n var i = {},\n r;\n\n for (dataKey in t) {\n _typeof(n[dataKey]) != ( true ? \"undefined\" : 0) && (i[t[dataKey]] = n[dataKey]);\n }\n\n return r = [i.category, i.action], i.opt_label != null && (r = r.concat(i.opt_label)), i.opt_value != null && (r = r.concat(i.opt_value)), r;\n}, GoogleListener.fireEvent = function (n) {\n if ((typeof _gaq === \"undefined\" ? \"undefined\" : _typeof(_gaq)) != ( true ? \"undefined\" : 0)) {\n var i = [\"_trackEvent\"],\n t = [\"b._trackEvent\"];\n _gaq.push(i.concat(n)), _gaq.push(t.concat(n));\n }\n}, GoogleListener.events = [\"rbx_evt_initial_install_begin\", \"rbx_evt_ftp\", \"rbx_evt_initial_install_success\", \"rbx_evt_fmp\", \"rbx_evt_abtest\", \"rbx_evt_card_redemption\"];\n; /// MongoEventListener.js\n\nMongoListener = new RBXBaseEventListener(), MongoListener.handleEvent = function (n, t) {\n var i;\n return i = typeof t.shard == \"undefined\" ? this.defaultShard : t.shard, typeof t.eventName == \"undefined\" && (t.eventName = n.type), t.eventName === \"JavascriptExceptionLoggingEvent\" ? dataMap = {\n category: \"category\",\n url: \"url\",\n msg: \"msg\",\n line: \"line\",\n ua: \"UA\"\n } : (typeof t.category == \"undefined\" && (t.category = MongoListener.getCategoryFromEventName(t.eventName)), t.userId = MongoListener.userId, t.ip = MongoListener.clientIpAddress, dataMap = {\n guid: \"guid\",\n category: \"category\",\n userId: \"userid\",\n ip: \"ip\"\n }), this.fireEvent(i, this.distillData(t, dataMap)), !0;\n}, MongoListener.getCategoryFromEventName = function (n) {\n switch (n) {\n case \"rbx_evt_sitetouch\":\n return \"SiteTouch\";\n\n case \"rbx_evt_fmp\":\n return \"FiveMinutePlay\";\n\n case \"rbx_evt_play_user\":\n case \"rbx_evt_play_guest\":\n return \"Play\";\n\n default:\n return n;\n }\n}, MongoListener.distillData = function (n, t) {\n var i = {};\n\n for (dataKey in t) {\n _typeof(n[dataKey]) != ( true ? \"undefined\" : 0) && (i[t[dataKey]] = encodeURIComponent(n[dataKey]));\n }\n\n return i;\n}, MongoListener.fireEvent = function (n, t) {\n $.ajax({\n url: MongoListener.loggingURI + n,\n dataType: \"jsonp\",\n jsonpCallback: \"MongoListener.callback\",\n data: t\n });\n}, MongoListener.callback = function () {}, MongoListener.events = [\"JavascriptExceptionLoggingEvent\"];\n; /// SearchVisionListener.js\n\nSearchVisionListener = new RBXBaseEventListener(), SearchVisionListener.handleEvent = function (n, t) {\n var i = null;\n\n switch (n.type) {\n case \"rbx_evt_fmp\":\n i = {\n esvtk_v: \"1\",\n esvtk_esvid: \"A40125\",\n event: \"five_minute_play\"\n };\n break;\n\n case \"rbx_evt_ftp\":\n i = {\n esvtk_v: \"1\",\n esvtk_esvid: \"A40125\",\n event: \"first_play\"\n };\n break;\n\n case \"rbx_evt_install_begin\":\n i = {\n esvtk_v: \"1\",\n esvtk_esvid: \"A40125\",\n event: \"download\"\n };\n break;\n\n case \"rbx_evt_signup\":\n i = {\n esvtk_v: \"1\",\n esvtk_esvid: \"A40125\",\n event: \"esv_signup\"\n };\n break;\n\n case \"rbx_evt_generic\":\n t.type === \"OneDayReturn\" && (i = {\n esvtk_v: \"1\",\n esvtk_esvid: \"A40125\",\n event: \"return\"\n });\n }\n\n return i !== null && (i.orderid = t.guid, this.fireEvent(i)), !0;\n}, SearchVisionListener.fireEvent = function (n) {\n typeof esvtk_track != \"undefined\" ? esvtk_track(n) : setTimeout(function () {\n SearchVisionListener.fireEvent(n);\n }, 500);\n}, SearchVisionListener.events = [\"rbx_evt_fmp\", \"rbx_evt_ftp\", \"rbx_evt_install_begin\", \"rbx_evt_signup\", \"rbx_evt_generic\"];\n; /// SiteTouchEvent.js\n\ntypeof Roblox == \"undefined\" && (Roblox = {}), Roblox.SiteTouchEvent = function () {\n function r() {\n var t, i;\n return typeof localStorage != \"undefined\" && (t = localStorage.getItem(n)), (typeof t == \"undefined\" || t === null) && (t = $.cookie(n)), i = Date.parse(t), t && !isNaN(i) ? new Date(i) : new Date(0);\n }\n\n function i(i) {\n typeof i == \"undefined\" && (i = new Date()), typeof localStorage != \"undefined\" && (t.useLocalStorage ? $.cookie(n, null) : localStorage.removeItem(n)), t.useLocalStorage && typeof localStorage != \"undefined\" ? localStorage.setItem(n, i) : $.cookie(n, i, {\n expires: 100\n });\n }\n\n function u() {\n var n = r();\n Math.floor((new Date() - n) / 36e5) >= t.dateDiffThresholdInHours && RobloxEventManager.triggerEvent(\"rbx_evt_sitetouch\"), i();\n }\n\n var n = \"LastActivity\",\n t = {\n updateLastActivityAndFireEvent: u,\n getLastActivity: r,\n setLastActivity: i,\n dateDiffThresholdInHours: 3,\n useLocalStorage: !1\n };\n return t;\n}();\n; /// JSErrorTracker.js\n\ntypeof Roblox == \"undefined\" && (Roblox = {}), Roblox.JSErrorTracker = {\n showAlert: !1,\n defaultPixel: \"GA\",\n internalEventListenerPixelEnabled: !1,\n javascriptStackTraceEnabled: !1,\n data: {\n category: \"Javascript Errors\"\n },\n initialize: function initialize(n) {\n typeof n != \"undefined\" && (typeof n.showAlert != \"undefined\" && (this.showAlert = n.showAlert), typeof n.internalEventListenerPixelEnabled != \"undefined\" && (this.internalEventListenerPixelEnabled = n.internalEventListenerPixelEnabled)), this.addOnErrorEventHandler(this.errorHandler);\n },\n errorHandler: function errorHandler(n, t, i) {\n try {\n Roblox.JSErrorTracker.data.msg = n, Roblox.JSErrorTracker.data.url = t, Roblox.JSErrorTracker.data.line = i, Roblox.JSErrorTracker.data.ua = window.navigator.userAgent, Roblox.JSErrorTracker.logException(Roblox.JSErrorTracker.data);\n } catch (r) {}\n\n return !0;\n },\n addOnErrorEventHandler: function addOnErrorEventHandler(n) {\n var t = window.onerror;\n window.onerror = typeof window.onerror == \"function\" ? function (i, r, u) {\n t(i, r, u), n(i, r, u);\n } : n;\n },\n processException: function processException(n, t) {\n if (typeof n != \"undefined\") {\n typeof n.category == \"undefined\" && (n.category = Roblox.JSErrorTracker.data.category);\n\n switch (t) {\n case \"GA\":\n var i = {\n category: \"category\",\n url: \"action\",\n msg: \"opt_label\",\n line: \"opt_value\"\n };\n Roblox.JSErrorTracker.fireGAPixel(Roblox.JSErrorTracker.distillGAData(n, i));\n break;\n\n case \"Diag\":\n Roblox.JSErrorTracker.internalEventListenerPixelEnabled && (n.category = \"JavascriptExceptions\", n.shard = \"WebMetrics\", n.eventName = \"JavascriptExceptionLoggingEvent\", RobloxEventManager.triggerEvent(\"JavascriptExceptionLoggingEvent\", n));\n break;\n\n default:\n console.log(\"Roblox JSErrorTracker received an unknown pixel to fire\");\n }\n\n return !0;\n }\n },\n logException: function logException(n) {\n Roblox.JSErrorTracker.processException(n, Roblox.JSErrorTracker.defaultPixel), Roblox.JSErrorTracker.internalEventListenerPixelEnabled && Roblox.JSErrorTracker.processException(n, \"Diag\"), Roblox.JSErrorTracker.showErrorMessage(n.msg);\n },\n distillData: function distillData(n, t) {\n var r = {},\n i;\n\n for (i in t) {\n typeof n[i] != \"undefined\" && (r[t[i]] = encodeURIComponent(n[i]));\n }\n\n return r;\n },\n distillGAData: function distillGAData(n, t) {\n var r = Roblox.JSErrorTracker.distillData(n, t),\n i = [decodeURIComponent([r.category])];\n return _typeof(r.action) != ( true ? \"undefined\" : 0) ? (i = i.concat(decodeURIComponent(r.action)), _typeof(r.opt_label) != ( true ? \"undefined\" : 0) && (i = i.concat(decodeURIComponent(r.opt_label)), _typeof(r.opt_value) != ( true ? \"undefined\" : 0) && (i = i.concat(parseInt(decodeURIComponent(r.opt_value)))))) : Roblox.JSErrorTracker.showAlert && alert(\"Missing a required parameter for GA\"), i;\n },\n createURL: function createURL(n, t, i) {\n var r = n,\n f = Roblox.JSErrorTracker.distillData(t, i),\n u;\n if (r += \"?\", f != null) for (u in f) {\n _typeof(u) != ( true ? \"undefined\" : 0) && t.hasOwnProperty(u) && (r += u + \"=\" + f[u] + \"&\");\n }\n return r = r.slice(0, r.length - 1);\n },\n fireGAPixel: function fireGAPixel(n) {\n typeof _gaq != \"undefined\" && _gaq.push([\"c._trackEvent\"].concat(n));\n },\n showErrorMessage: function showErrorMessage(n) {\n Roblox.JSErrorTracker.showAlert && (n !== null ? alert(n) : alert(\"An error occured\"));\n }\n};\n; /// Studio2Alert.js\n\nvar studio2AlertModal = {\n showPrompt: !1,\n userId: 0,\n updateStudioAlertUserPreference: function updateStudioAlertUserPreference() {\n $.ajax({\n type: \"GET\",\n url: \"/WebHandlers/Studio2Alert.ashx?uId=\" + studio2AlertModal.userId\n });\n },\n close: function close() {\n studio2AlertModal.updateStudioAlertUserPreference(), $.modal.close(\"#Studio2AlertModal\");\n },\n init: function init() {\n studio2AlertModal.showPrompt = $(\"#Studio2AlertModal\").data(\"showprompt\"), studio2AlertModal.userId = $(\"#Studio2AlertModal\").data(\"userid\");\n var n = {\n escClose: !0,\n opacity: 80,\n overlayCss: {\n backgroundColor: \"#000\"\n }\n };\n studio2AlertModal.showPrompt && Roblox.Client.isIDE() && (studio2AlertModal.updateStudioAlertUserPreference(), $(\"#Studio2AlertModal\").modal(n));\n }\n};\n$(\"#closeStudio2Alert\").click(function () {\n studio2AlertModal.close();\n}), $(function () {\n studio2AlertModal.init();\n});\n; /// ClientInstaller.js\n\nfunction tryToDownload() {\n oIFrm = document.getElementById(\"downloadInstallerIFrame\"), oIFrm.src = \"/install/setup.ashx\";\n}\n\nfunction logStatistics(n) {\n $.get(\"/install/VisitButtonHandler.ashx?reqtype=\" + n, function () {});\n}\n\nType.registerNamespace(\"Roblox.Client\"), Roblox.Client._installHost = null, Roblox.Client._installSuccess = null, Roblox.Client._CLSID = null, Roblox.Client._continuation = null, Roblox.Client._skip = null, Roblox.Client._isIDE = null, Roblox.Client._isRobloxBrowser = null, Roblox.Client._isPlaceLaunch = !1, Roblox.Client._silentModeEnabled = !1, Roblox.Client._bringAppToFrontEnabled = !1, Roblox.Client._numLocks = 0, Roblox.Client._logTiming = !1, Roblox.Client._logStartTime = null, Roblox.Client._logEndTime = null, Roblox.Client._hiddenModeEnabled = !1, Roblox.Client._runInstallABTest = function () {}, Roblox.Client.ReleaseLauncher = function (n, t, i) {\n if (t && Roblox.Client._numLocks--, (i || Roblox.Client._numLocks <= 0) && (n != null && (document.getElementById(\"pluginObjDiv\").innerHTML = \"\", n = null), Roblox.Client._numLocks = 0), Roblox.Client._logTiming) {\n Roblox.Client._logEndTime = new Date();\n\n var r = Roblox.Client._logEndTime.getTime() - Roblox.Client._logStartTime.getTime();\n\n console && console.log && console.log(\"Roblox.Client: \" + r + \"ms from Create to Release.\");\n }\n}, Roblox.Client.GetInstallHost = function (n) {\n if (window.ActiveXObject) return n.InstallHost;\n var t = n.Get_InstallHost();\n return t.match(/roblox.com$/) ? t : t.substring(0, t.length - 1);\n}, Roblox.Client.CreateLauncher = function (n) {\n var i, u, t, r;\n Roblox.Client._logTiming && (Roblox.Client._logStartTime = new Date()), n && Roblox.Client._numLocks++, (Roblox.Client._installHost == null || Roblox.Client._CLSID == null) && typeof initClientProps == \"function\" && initClientProps(), i = document.getElementById(\"robloxpluginobj\"), u = $(\"#pluginObjDiv\"), i || (Roblox.Client._hiddenModeEnabled = !1, window.ActiveXObject ? (t = 'Failed to INIT Plugin', $(u).append(t)) : (t = '', t += \"

You need Our Plugin for this. Get the latest version from\", t += 'here.

', $(u).append(t)), i = document.getElementById(\"robloxpluginobj\"));\n\n try {\n if (i || (typeof console.log == \"undefined\" ? alert(\"Plugin installation failed!\") : console.log(\"Plugin installation failed!\")), i.Hello(), r = Roblox.Client.GetInstallHost(i), !r || r != Roblox.Client._installHost) throw \"wrong InstallHost: (plugins): \" + r + \" (servers): \" + Roblox.Client._installHost;\n return i;\n } catch (f) {\n return Roblox.Client.ReleaseLauncher(i, n, !1), null;\n }\n}, Roblox.Client.isIDE = function () {\n if (Roblox.Client._isIDE == null && (Roblox.Client._isIDE = !1, Roblox.Client._isRobloxBrowser = !1, window.external)) try {\n window.external.IsRobloxAppIDE !== undefined && (Roblox.Client._isIDE = window.external.IsRobloxAppIDE, Roblox.Client._isRobloxBrowser = !0);\n } catch (n) {}\n return Roblox.Client._isIDE;\n}, Roblox.Client.isRobloxBrowser = function () {\n return Roblox.Client.isIDE(), Roblox.Client._isRobloxBrowser;\n}, Roblox.Client.robloxBrowserInstallHost = function () {\n if (window.external) try {\n return window.external.InstallHost;\n } catch (n) {}\n return \"\";\n}, Roblox.Client.IsRobloxProxyInstalled = function () {\n var t = Roblox.Client.CreateLauncher(!1),\n n = !1;\n return (t != null && (n = !0), Roblox.Client.ReleaseLauncher(t, !1, !1), n || Roblox.Client.isRobloxBrowser()) ? !0 : !1;\n}, Roblox.Client.IsRobloxInstalled = function () {\n try {\n var t = Roblox.Client.CreateLauncher(!1),\n n = Roblox.Client.GetInstallHost(t);\n return Roblox.Client.ReleaseLauncher(t, !1, !1), n == Roblox.Client._installHost;\n } catch (i) {\n return Roblox.Client.isRobloxBrowser() ? (n = Roblox.Client.robloxBrowserInstallHost(), n == Roblox.Client._installHost) : !1;\n }\n}, Roblox.Client.SetStartInHiddenMode = function (n) {\n try {\n var t = Roblox.Client.CreateLauncher(!1);\n if (t !== null) return t.SetStartInHiddenMode(n), Roblox.Client._hiddenModeEnabled = n, !0;\n } catch (i) {}\n\n return !1;\n}, Roblox.Client.UnhideApp = function () {\n try {\n if (Roblox.Client._hiddenModeEnabled) {\n var n = Roblox.Client.CreateLauncher(!1);\n n.UnhideApp();\n }\n } catch (t) {}\n}, Roblox.Client.Update = function () {\n try {\n var n = Roblox.Client.CreateLauncher(!1);\n n.Update(), Roblox.Client.ReleaseLauncher(n, !1, !1);\n } catch (t) {\n alert(\"Error updating: \" + t);\n }\n}, Roblox.Client.WaitForRoblox = function (n) {\n if (Roblox.Client._skip) return window.location = Roblox.Client._skip, !1;\n\n if (Roblox.Client._continuation = n, Roblox.Client._cancelled = !1, !Roblox.Client.IsRobloxProxyInstalled() && Roblox.Client.ImplementsProxy) {\n Roblox.InstallationInstructions.show(), Roblox.Client.runInstallABTest();\n var t = \"Windows\";\n return navigator.appVersion.indexOf(\"Mac\") != -1 && (t = \"Mac\"), (typeof _gaq === \"undefined\" ? \"undefined\" : _typeof(_gaq)) != ( true ? \"undefined\" : 0) && (_gaq.push([\"_trackEvent\", \"Install Begin\", t]), _gaq.push([\"b._trackEvent\", \"Install Begin\", t])), RobloxEventManager.triggerEvent(\"rbx_evt_install_begin\", {\n os: t\n }), window.chrome && (window.location.hash = \"#chromeInstall\", $.cookie(\"chromeInstall\", n.toString().replace(/play_placeId/, play_placeId.toString()))), window.setTimeout(function () {\n Roblox.Client._ontimer();\n }, 1e3), tryToDownload(), !0;\n }\n\n return Roblox.Client._continuation(), !1;\n}, Roblox.Client.ResumeTimer = function (n) {\n Roblox.Client._continuation = n, Roblox.Client._cancelled = !1, window.setTimeout(function () {\n Roblox.Client._ontimer();\n }, 0);\n}, Roblox.Client.Refresh = function () {\n try {\n navigator.plugins.refresh(!1);\n } catch (n) {}\n}, Roblox.Client._onCancel = function () {\n return Roblox.InstallationInstructions.hide(), Roblox.Client._cancelled = !0, !1;\n}, Roblox.Client._ontimer = function () {\n Roblox.Client._cancelled || (Roblox.Client.Refresh(), Roblox.Client.IsRobloxProxyInstalled() ? (Roblox.InstallationInstructions.hide(), window.setTimeout(function () {\n window.chrome && window.location.hash == \"#chromeInstall\" && (window.location.hash = \"\", $.cookie(\"chromeInstall\", null));\n }, 5e3), Roblox.Client._continuation(), Roblox.Client._installSuccess && Roblox.Client._installSuccess()) : window.setTimeout(function () {\n Roblox.Client._ontimer();\n }, 1e3));\n};\n; /// InstallationInstructions.js\n\ntypeof Roblox == \"undefined\" && (Roblox = {}), Roblox.InstallationInstructions = function () {\n function i() {\n var t, i, r;\n n(), t = 0, i = $(\".InstallInstructionsImage\"), i && typeof $(i).attr(\"modalwidth\") != \"undefined\" && (t = $(\".InstallInstructionsImage\").attr(\"modalwidth\")), t > 0 ? (r = ($(window).width() - (t - 10)) / 2, $(\"#InstallationInstructions\").modal({\n escClose: !0,\n opacity: 50,\n minWidth: t,\n maxWidth: t,\n overlayCss: {\n backgroundColor: \"#000\"\n },\n position: [20, r]\n })) : $(\"#InstallationInstructions\").modal({\n escClose: !0,\n opacity: 50,\n maxWidth: $(window).width() / 2,\n minWidth: $(window).width() / 2,\n overlayCss: {\n backgroundColor: \"#000\"\n },\n position: [20, \"25%\"]\n });\n }\n\n function r() {\n $.modal.close();\n }\n\n function n() {\n var n = $(\".InstallInstructionsImage\");\n navigator.userAgent.match(/Mac OS X 10[_|\\.]5/) ? n && typeof $(n).attr(\"oldmacdelaysrc\") != \"undefined\" && $(\".InstallInstructionsImage\").attr(\"src\", $(\".InstallInstructionsImage\").attr(\"oldmacdelaysrc\")) : n && typeof $(n).attr(\"delaysrc\") != \"undefined\" && $(\".InstallInstructionsImage\").attr(\"src\", $(\".InstallInstructionsImage\").attr(\"delaysrc\"));\n }\n\n return {\n show: i,\n hide: r\n };\n}();\n; /// MadStatus.js\n\nMadStatus = {\n running: !1,\n init: function init(n, t, i, r) {\n MadStatus.running && MadStatus.stop(), MadStatus.updateInterval = i ? i : 2e3, MadStatus.fadeInterval = r ? r : 1e3, MadStatus.timeout = null, MadStatus.running = !0, MadStatus.field = n, MadStatus.backBuffer = t, MadStatus.field.show(), MadStatus.backBuffer.hide();\n },\n participle: [\"Accelerating\", \"Aggregating\", \"Allocating\", \"Aquiring\", \"Automating\", \"Backtracing\", \"Bloxxing\", \"Bootstraping\", \"Calibrating\", \"Correlating\", \"De-noobing\", \"De-ionizing\", \"Deriving\", \"Energizing\", \"Filtering\", \"Generating\", \"Indexing\", \"Loading\", \"Noobing\", \"Optimizing\", \"Oxidizing\", \"Queueing\", \"Parsing\", \"Processing\", \"Rasterizing\", \"Reading\", \"Registering\", \"Re-routing\", \"Resolving\", \"Sampling\", \"Updating\", \"Writing\"],\n modifier: [\"Blox\", \"Count Zero\", \"Cylon\", \"Data\", \"Ectoplasm\", \"Encryption\", \"Event\", \"Farnsworth\", \"Bebop\", \"Flux Capacitor\", \"Fusion\", \"Game\", \"Gibson\", \"Host\", \"Mainframe\", \"Metaverse\", \"Nerf Herder\", \"Neutron\", \"Noob\", \"Photon\", \"Profile\", \"Script\", \"Skynet\", \"TARDIS\", \"Virtual\"],\n subject: [\"Analogs\", \"Blocks\", \"Cannon\", \"Channels\", \"Core\", \"Database\", \"Dimensions\", \"Directives\", \"Engine\", \"Files\", \"Gear\", \"Index\", \"Layer\", \"Matrix\", \"Paradox\", \"Parameters\", \"Parsecs\", \"Pipeline\", \"Players\", \"Ports\", \"Protocols\", \"Reactors\", \"Sphere\", \"Spooler\", \"Stream\", \"Switches\", \"Table\", \"Targets\", \"Throttle\", \"Tokens\", \"Torpedoes\", \"Tubes\"],\n newLib: function newLib() {\n return libString = this.participle[Math.floor(Math.random() * this.participle.length)] + \" \" + this.modifier[Math.floor(Math.random() * this.modifier.length)] + \" \" + this.subject[Math.floor(Math.random() * this.subject.length)] + \"...\";\n },\n start: function start() {\n MadStatus.timeout == null && (MadStatus.timeout = setInterval(\"MadStatus.update()\", MadStatus.updateInterval), MadStatus.running = !0);\n },\n stop: function stop(n) {\n clearInterval(MadStatus.timeout), MadStatus.timeout = null, MadStatus.field[0].innerHTML = _typeof(n) != ( true ? \"undefined\" : 0) ? n : \"\", MadStatus.running = !1;\n },\n manualUpdate: function manualUpdate(n, t, i) {\n MadStatus.timeout && MadStatus.stop(), this.update(n, i), t && setTimeout(\"MadStatus.start()\", 1e3);\n },\n update: function update(n, t) {\n (MadStatus.backBuffer[0].innerHTML = _typeof(n) != ( true ? \"undefined\" : 0) ? n : this.newLib(), (typeof noAnim === \"undefined\" ? \"undefined\" : _typeof(noAnim)) == ( true ? \"undefined\" : 0) || t != !1) && (this.field.hide(), this.backBuffer.fadeIn(this.fadeInterval + 2, function () {\n MadStatus.field[0].innerHTML = MadStatus.backBuffer[0].innerHTML, MadStatus.field.show(), MadStatus.backBuffer.hide();\n }));\n }\n};\n; /// PlaceLauncher.js\n\nvar RBX = {},\n RobloxLaunchStates = {\n StartingServer: \"StartingServer\",\n StartingClient: \"StartingClient\",\n Upgrading: \"Upgrading\",\n None: \"None\"\n},\n RobloxLaunch = {\n launchGamePage: null,\n timer: null,\n clientMetricType: null,\n launcher: null,\n googleAnalyticsCallback: function googleAnalyticsCallback() {\n RobloxLaunch._GoogleAnalyticsCallback && RobloxLaunch._GoogleAnalyticsCallback();\n },\n state: RobloxLaunchStates.None,\n secureAuthenticate: !1\n},\n RobloxPlaceLauncherService = {\n LogJoinClick: function LogJoinClick() {\n $.get(\"/Game/Placelauncher.ashx\", {\n request: \"LogJoinClick\"\n });\n },\n RequestGame: function RequestGame(n, t, i, r, u, f) {\n i = i !== null && i !== undefined ? i : \"\", $.getJSON(\"/Game/PlaceLauncher.ashx\", {\n request: \"RequestGame\",\n placeId: n,\n isPartyLeader: t,\n gender: i\n }, function (n) {\n n.Error ? u(n.Error, f) : r(n, f);\n });\n },\n RequestPlayWithParty: function RequestPlayWithParty(n, t, i, r, u, f) {\n $.getJSON(\"/Game/PlaceLauncher.ashx\", {\n request: \"RequestPlayWithParty\",\n placeId: n,\n partyGuid: t,\n gameId: i\n }, function (n) {\n n.Error ? u(n.Error, f) : r(n, f);\n });\n },\n RequestGroupBuildGame: function RequestGroupBuildGame(n, t, i, r) {\n $.getJSON(\"/Game/PlaceLauncher.ashx\", {\n request: \"RequestGroupBuildGame\",\n placeId: n\n }, function (n) {\n n.Error ? i(n.Error, r) : t(n, r);\n });\n },\n RequestFollowUser: function RequestFollowUser(n, t, i, r) {\n $.getJSON(\"/Game/PlaceLauncher.ashx\", {\n request: \"RequestFollowUser\",\n userId: n\n }, function (n) {\n n.Error ? i(n.Error, r) : t(n, r);\n });\n },\n RequestGameJob: function RequestGameJob(n, t, i, r, u, f) {\n $.getJSON(\"/Game/PlaceLauncher.ashx\", {\n request: \"RequestGameJob\",\n placeId: n,\n gameId: t,\n gameJobId: i\n }, function (n) {\n n.Error ? u(n.Error, f) : r(n, f);\n });\n },\n CheckGameJobStatus: function CheckGameJobStatus(n, t, i, r) {\n $.getJSON(\"/Game/PlaceLauncher.ashx\", {\n request: \"CheckGameJobStatus\",\n jobId: n\n }, function (n) {\n n.Error ? i(n.Error, r) : t(n, r);\n });\n }\n};\nRobloxLaunch.RequestPlayWithParty = function (n, t, i, r) {\n RobloxPlaceLauncherService.LogJoinClick(), RobloxLaunch.timer = new Date(), RobloxLaunch.state = RobloxLaunchStates.None, RobloxLaunch.clientMetricType = \"WebPlay\", checkRobloxInstall() && (RobloxLaunch.launcher === null && (RobloxLaunch.launcher = new RBX.PlaceLauncher(n)), RobloxLaunch.launcher.RequestPlayWithParty(t, i, r));\n}, RobloxLaunch.RequestGame = function (n, t, i) {\n RobloxPlaceLauncherService.LogJoinClick(), RobloxLaunch.timer = new Date(), RobloxLaunch.state = RobloxLaunchStates.None, RobloxLaunch.clientMetricType = \"WebPlay\", checkRobloxInstall() && (RobloxLaunch.launcher === null && (RobloxLaunch.launcher = new RBX.PlaceLauncher(n)), RobloxLaunch.launcher.RequestGame(t, i));\n}, RobloxLaunch.RequestGroupBuildGame = function (n, t) {\n RobloxPlaceLauncherService.LogJoinClick(), RobloxLaunch.timer = new Date(), RobloxLaunch.state = RobloxLaunchStates.None, RobloxLaunch.clientMetricType = \"WebPlay\", checkRobloxInstall() && (RobloxLaunch.launcher === null && (RobloxLaunch.launcher = new RBX.PlaceLauncher(n)), RobloxLaunch.launcher.RequestGroupBuildGame(t));\n}, RobloxLaunch.RequestGameJob = function (n, t, i, r) {\n RobloxPlaceLauncherService.LogJoinClick(), RobloxLaunch.timer = new Date(), RobloxLaunch.state = RobloxLaunchStates.None, RobloxLaunch.clientMetricType = \"WebJoin\", checkRobloxInstall() && (RobloxLaunch.launcher === null && (RobloxLaunch.launcher = new RBX.PlaceLauncher(n)), RobloxLaunch.launcher.RequestGameJob(t, i, r));\n}, RobloxLaunch.RequestFollowUser = function (n, t) {\n RobloxPlaceLauncherService.LogJoinClick(), RobloxLaunch.timer = new Date(), RobloxLaunch.state = RobloxLaunchStates.None, RobloxLaunch.clientMetricType = \"WebFollow\", checkRobloxInstall() && (RobloxLaunch.launcher === null && (RobloxLaunch.launcher = new RBX.PlaceLauncher(n)), RobloxLaunch.launcher.RequestFollowUser(t));\n}, RobloxLaunch.StartGame = function (n, t, i, r, u) {\n var o, f, e, s;\n RobloxLaunch.secureAuthenticate && (i = i.replace(\"http://\", \"https://\")), n = typeof RobloxLaunch.SeleniumTestMode == \"undefined\" ? n + \"&testmode=false\" : n + \"&testmode=true\", typeof urchinTracker != \"undefined\" && urchinTracker(\"Visit/Try/\" + t), RobloxLaunch.state = RobloxLaunchStates.StartingClient, RobloxLaunch.googleAnalyticsCallback !== null && RobloxLaunch.googleAnalyticsCallback(), o = null;\n\n try {\n if (typeof window.external != \"undefined\" && window.external.IsRobloxABApp) window.external.StartGame(r, i, n);else if (typeof window.external != \"undefined\" && window.external.IsRoblox2App && (n.indexOf(\"visit\") != -1 || u)) window.external.StartGame(r, i, n);else if (o = \"RobloxProxy/\", f = Roblox.Client.CreateLauncher(!0), f) {\n o = \"RobloxProxy/StartGame/\";\n\n try {\n try {\n window.ActiveXObject ? f.AuthenticationTicket = r : f.Put_AuthenticationTicket(r), u && f.SetEditMode();\n } catch (a) {}\n\n try {\n if (Roblox.Client._silentModeEnabled) f.SetSilentModeEnabled(!0), Roblox.VideoPreRoll.videoInitialized && Roblox.VideoPreRoll.isPlaying() && Roblox.Client.SetStartInHiddenMode(!0), f.StartGame(i, n), RobloxLaunch.CheckGameStarted(f);else throw \"silent mode is disabled, fall back\";\n } catch (a) {\n if (f.StartGame(i, n), Roblox.Client._bringAppToFrontEnabled) try {\n f.BringAppToFront();\n } catch (h) {}\n Roblox.Client.ReleaseLauncher(f, !0, !1), $.modal.close();\n }\n } catch (a) {\n Roblox.Client.ReleaseLauncher(f, !0, !1);\n throw a;\n }\n } else {\n try {\n parent.playFromUrl(n);\n return;\n } catch (l) {}\n\n if (Roblox.Client.isRobloxBrowser()) try {\n window.external.StartGame(r, i, n);\n } catch (l) {\n throw \"window.external fallback failed, Roblox must not be installed or IE cannot access ActiveX\";\n } else throw \"launcher is null or undefined and external is missing\";\n RobloxLaunch.state = RobloxLaunchStates.None, $.modal.close();\n }\n } catch (a) {\n if (e = a.message, e === \"User cancelled\" && typeof urchinTracker != \"undefined\") return urchinTracker(\"Visit/UserCancelled/\" + t), !1;\n\n try {\n s = new ActiveXObject(\"Microsoft.XMLHTTP\");\n } catch (c) {\n e = \"FailedXMLHTTP/\" + e;\n }\n\n return Roblox.Client.isRobloxBrowser() ? typeof urchinTracker != \"undefined\" && urchinTracker(\"Visit/Fail/\" + o + encodeURIComponent(e)) : (typeof urchinTracker != \"undefined\" && urchinTracker(\"Visit/Redirect/\" + o + encodeURIComponent(e)), window.location = RobloxLaunch.launchGamePage), !1;\n }\n\n return typeof urchinTracker != \"undefined\" && urchinTracker(\"Visit/Success/\" + t), !0;\n}, RobloxLaunch.CheckGameStarted = function (n) {\n function r() {\n var e = !1;\n\n try {\n if (i || (i = window.ActiveXObject ? n.IsGameStarted : n.Get_GameStarted()), i && !Roblox.VideoPreRoll.isPlaying()) {\n if (MadStatus.stop(\"Connecting to Players...\"), RobloxLaunch.state = RobloxLaunchStates.None, $.modal.close(), t._cancelled = !0, Roblox.Client._hiddenModeEnabled && Roblox.Client.UnhideApp(), Roblox.Client._bringAppToFrontEnabled) try {\n n.BringAppToFront();\n } catch (f) {}\n Roblox.Client.ReleaseLauncher(n, !0, !1);\n } else t._cancelled || setTimeout(r, 1e3);\n } catch (u) {\n t._cancelled || setTimeout(r, 1e3);\n }\n }\n\n var t = RobloxLaunch.launcher,\n i;\n t === null && (t = new RBX.PlaceLauncher(\"PlaceLauncherStatusPanel\"), t._showDialog(), t._updateStatus(0)), i = !1, r();\n}, RobloxLaunch.CheckRobloxInstall = function (n) {\n if (Roblox.Client.IsRobloxInstalled()) return Roblox.Client.Update(), !0;\n window.location = n;\n}, RBX.PlaceLauncher = function (n) {\n this._cancelled = !1, this._popupID = n, this._popup = $(\"#\" + n);\n}, RBX.PlaceLauncher.prototype = {\n _showDialog: function _showDialog() {\n this._cancelled = !1, _popupOptions = {\n escClose: !0,\n opacity: 80,\n overlayCss: {\n backgroundColor: \"#000\"\n }\n }, this._popupID == \"PlaceLauncherStatusPanel\" && (Roblox.VideoPreRoll && Roblox.VideoPreRoll.showVideoPreRoll && !Roblox.VideoPreRoll.isExcluded() ? (this._popup = $(\"#videoPrerollPanel\"), _popupOptions.onShow = function (n) {\n Roblox.VideoPreRoll.correctIEModalPosition(n), Roblox.VideoPreRoll.start();\n }, _popupOptions.onClose = function () {\n Roblox.VideoPreRoll.close();\n }, _popupOptions.closeHTML = '') : (this._popup = $(\"#\" + this._popupID), _popupOptions.onClose = function () {\n Roblox.VideoPreRoll.logVideoPreRoll(), $.modal.close();\n })), this._popup.modal(_popupOptions);\n var n = this;\n $(\".CancelPlaceLauncherButton\").click(function () {\n n.CancelLaunch();\n }), $(\".CancelPlaceLauncherButton\").show();\n },\n _reportDuration: function _reportDuration(n, t) {\n $.ajax({\n type: \"GET\",\n async: !0,\n cache: !1,\n timeout: 5e4,\n url: \"/Game/JoinRate.ashx?c=\" + RobloxLaunch.clientMetricType + \"&r=\" + t + \"&d=\" + n,\n success: function success() {}\n });\n },\n _onGameStatus: function _onGameStatus(n) {\n var r, i, t;\n\n if (this._cancelled) {\n r = +new Date() - RobloxLaunch.timer.getTime(), this._reportDuration(r, \"Cancel\");\n return;\n }\n\n if (this._updateStatus(n.status), n.status === 2) RobloxLaunch.StartGame(n.joinScriptUrl, \"Join\", n.authenticationUrl, n.authenticationTicket), i = +new Date() - RobloxLaunch.timer.getTime(), this._reportDuration(i, \"Success\");else if (n.status < 2 || n.status === 6) {\n var f = function f(n, t) {\n t._onGameStatus(n);\n },\n e = function e(n, t) {\n t._onGameError(n);\n },\n o = this,\n u = function u() {\n RobloxPlaceLauncherService.CheckGameJobStatus(n.jobId, f, e, o);\n };\n\n window.setTimeout(u, 2e3);\n } else n.status === 4 && (t = +new Date() - RobloxLaunch.timer.getTime(), this._reportDuration(t, \"Failure\"));\n },\n _updateStatus: function _updateStatus(n) {\n MadStatus.running || (MadStatus.init($(this._popup).find(\".MadStatusField\"), $(this._popup).find(\".MadStatusBackBuffer\"), 2e3, 800), MadStatus.start());\n\n switch (n) {\n case 0:\n break;\n\n case 1:\n MadStatus.manualUpdate(\"A server is loading the game...\", !0);\n break;\n\n case 2:\n MadStatus.manualUpdate(\"The server is ready. Joining the game...\", !0);\n break;\n\n case 3:\n MadStatus.manualUpdate(\"Joining games is temporarily disabled while we upgrade. Please try again soon.\", !1);\n break;\n\n case 4:\n MadStatus.manualUpdate(\"An error occurred. Please try again later.\", !1);\n break;\n\n case 5:\n MadStatus.manualUpdate(\"The game you requested has ended.\", !1);\n break;\n\n case 6:\n MadStatus.manualUpdate(\"The game you requested is currently full. Waiting for an opening...\", !0, !1);\n break;\n\n case 7:\n MadStatus.manualUpdate(\"Roblox is updating. Please wait...\", !0);\n break;\n\n case 8:\n MadStatus.manualUpdate(\"Requesting a server\", !0);\n break;\n\n default:\n MadStatus.stop(\"Connecting to Players...\");\n }\n\n $(this._popup).find(\".MadStatusStarting\").css(\"display\", \"none\"), $(this._popup).find(\".MadStatusSpinner\").css(\"visibility\", n === 3 || n === 4 || n === 5 ? \"hidden\" : \"visible\");\n },\n _onGameError: function _onGameError() {\n this._updateStatus(4);\n },\n _startUpdatePolling: function _startUpdatePolling(n) {\n var t, i;\n\n try {\n if (RobloxLaunch.state = RobloxLaunchStates.Upgrading, t = Roblox.Client.CreateLauncher(!0), i = window.ActiveXObject ? t.IsUpToDate : t.Get_IsUpToDate(), i || i === undefined) {\n try {\n t.PreStartGame();\n } catch (e) {}\n\n Roblox.Client.ReleaseLauncher(t, !0, !1), RobloxLaunch.state = RobloxLaunchStates.StartingServer, n();\n return;\n }\n\n var f = function f(t, i, r) {\n r._onUpdateStatus(t, i, n);\n },\n u = function u(n, t) {\n t._onUpdateError(n);\n },\n r = this;\n\n this.CheckUpdateStatus(f, u, t, n, r);\n } catch (e) {\n Roblox.Client.ReleaseLauncher(t, !0, !1), n();\n }\n },\n _onUpdateStatus: function _onUpdateStatus(n, t, i) {\n if (!this._cancelled) if (this._updateStatus(n), n === 8) Roblox.Client.ReleaseLauncher(t, !0, !0), Roblox.Client.Refresh(), RobloxLaunch.state = RobloxLaunchStates.StartingServer, i();else if (n === 7) {\n var f = function f(n, t, r) {\n r._onUpdateStatus(n, t, i);\n },\n e = function e(n, t) {\n t._onUpdateError(n);\n },\n r = this,\n u = function u() {\n r.CheckUpdateStatus(f, e, t, i, r);\n };\n\n window.setTimeout(u, 2e3);\n } else alert(\"Unknown status from CheckUpdateStatus\");\n },\n _onUpdateError: function _onUpdateError() {\n this._updateStatus(2);\n },\n CheckUpdateStatus: function CheckUpdateStatus(n, t, i, r, u) {\n try {\n if (i.PreStartGame(), window.ActiveXObject) var f = i.IsUpToDate;else f = i.Get_IsUpToDate();\n f || f === undefined ? n(8, i, u) : n(7, i, u);\n } catch (e) {\n n(8, i, u);\n }\n },\n RequestGame: function RequestGame(n, t) {\n var r;\n\n this._showDialog();\n\n var f = function f(n, t) {\n t._onGameStatus(n);\n },\n u = function u(n, t) {\n t._onGameError(n);\n },\n e = this,\n i = !1;\n\n return typeof Party != \"undefined\" && typeof Party.AmILeader == \"function\" && (i = Party.AmILeader()), r = function r() {\n RobloxPlaceLauncherService.RequestGame(n, i, t, f, u, e);\n }, this._startUpdatePolling(r), !1;\n },\n RequestPlayWithParty: function RequestPlayWithParty(n, t, i) {\n this._showDialog();\n\n var f = function f(n, t) {\n t._onGameStatus(n);\n },\n e = function e(n, t) {\n t._onGameError(n);\n },\n r = this,\n u = function u() {\n RobloxPlaceLauncherService.RequestPlayWithParty(n, t, i, f, e, r);\n };\n\n return this._startUpdatePolling(u), !1;\n },\n RequestGroupBuildGame: function RequestGroupBuildGame(n) {\n this._showDialog();\n\n var r = function r(n, t) {\n t._onGameStatus(n, !0);\n },\n u = function u(n, t) {\n t._onGameError(n);\n },\n t = this,\n i = function i() {\n RobloxPlaceLauncherService.RequestGroupBuildGame(n, r, u, t);\n };\n\n return this._startUpdatePolling(i), !1;\n },\n RequestFollowUser: function RequestFollowUser(n) {\n this._showDialog();\n\n var r = function r(n, t) {\n t._onGameStatus(n);\n },\n u = function u(n, t) {\n t._onError(n);\n },\n t = this,\n i = function i() {\n RobloxPlaceLauncherService.RequestFollowUser(n, r, u, t);\n };\n\n return this._startUpdatePolling(i), !1;\n },\n RequestGameJob: function RequestGameJob(n, t, i) {\n this._showDialog();\n\n var f = function f(n, t) {\n t._onGameStatus(n);\n },\n e = function e(n, t) {\n t._onGameError(n);\n },\n r = this,\n u = function u() {\n RobloxPlaceLauncherService.RequestGameJob(n, t, i, f, e, r);\n };\n\n return this._startUpdatePolling(u), !1;\n },\n CancelLaunch: function CancelLaunch() {\n return this._cancelled = !0, $.modal.close(), !1;\n },\n dispose: function dispose() {\n RBX.PlaceLauncher.callBaseMethod(this, \"dispose\");\n }\n};\n; /// VideoPreRoll.js\n\nfunction openVideoPreroll2(n) {\n Roblox.VideoPreRoll.test(n);\n}\n\nfunction flashCheck(n) {\n var i = !1,\n t,\n r;\n if (window.ActiveXObject) try {\n t = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.\" + n), i = !0;\n } catch (u) {} else navigator.plugins && navigator.mimeTypes.length > 0 && (t = navigator.plugins[\"Shockwave Flash\"], t && (r = navigator.plugins[\"Shockwave Flash\"].description.replace(/.*\\s(\\d+\\.\\d+).*/, \"$1\"), r >= n && (i = !0)));\n return i;\n}\n\ntypeof Roblox == \"undefined\" && (Roblox = {}), Roblox.VideoPreRoll = {\n newValue: \"\",\n showVideoPreRoll: !1,\n videoInitialized: !1,\n videoStarted: !1,\n videoCompleted: !1,\n videoSkipped: !1,\n videoCancelled: !1,\n videoErrored: !1,\n videoOptions: {\n key: \"integration_test\",\n companionId: \"videoPrerollCompanionAd\"\n },\n myvpaidad: null,\n loadingBarMaxTime: 3e4,\n loadingBarCurrentTime: 0,\n loadingBarIntervalID: 0,\n loadingBarID: \"videoPrerollLoadingBar\",\n loadingBarInnerID: \"videoPrerollLoadingBarCompleted\",\n loadingBarPercentageID: \"videoPrerollLoadingPercent\",\n videoLoadingTimeout: 7e3,\n videoPlayingTimeout: 23e3,\n videoLogNote: \"\",\n logsEnabled: !1,\n excludedPlaceIds: \"\",\n specificAdOnPlacePageEnabled: !1,\n specificAdOnPlacePageId: 0,\n specificAdOnPlacePageCategory: \"\",\n checkEligibility: function checkEligibility() {\n Roblox.VideoPreRoll.showVideoPreRoll && (flashCheck(8) ? typeof __adaptv__ == \"undefined\" ? (Roblox.VideoPreRoll.videoLogNote = \"NoAdapTv\", Roblox.VideoPreRoll.showVideoPreRoll = !1) : Roblox.Client.IsRobloxInstalled() ? Roblox.Client.isIDE() ? (Roblox.VideoPreRoll.videoLogNote = \"RobloxStudio\", Roblox.VideoPreRoll.showVideoPreRoll = !1) : Roblox.Client.isRobloxBrowser() ? (Roblox.VideoPreRoll.videoLogNote = \"RobloxPlayer\", Roblox.VideoPreRoll.showVideoPreRoll = !1) : window.chrome && window.location.hash == \"#chromeInstall\" && (Roblox.VideoPreRoll.showVideoPreRoll = !1) : Roblox.VideoPreRoll.showVideoPreRoll = !1 : (Roblox.VideoPreRoll.videoLogNote = \"NoFlash\", Roblox.VideoPreRoll.showVideoPreRoll = !1));\n },\n isExcluded: function isExcluded() {\n var t, n;\n if (Roblox.VideoPreRoll.showVideoPreRoll && Roblox.VideoPreRoll.excludedPlaceIds !== \"\" && (t = Roblox.VideoPreRoll.excludedPlaceIds.split(\",\"), typeof play_placeId != \"undefined\")) for (n = 0; n < t.length; n++) {\n if (play_placeId == t[n]) return Roblox.VideoPreRoll.videoLogNote = \"ExcludedPlace\", !0;\n }\n return !1;\n },\n start: function start() {\n var i, r, t, n;\n this.videoInitialized = !0, this.videoStarted = !1, this.videoCancelled = !1, this.videoCompleted = !1, this.videoSkipped = !1, this.loadingBarCurrentTime = 0, this.videoLogNote = \"\", Roblox.VideoPreRoll.specificAdOnPlacePageEnabled && typeof play_placeId != \"undefined\" && (i = \",\" + Roblox.VideoPreRoll.specificAdOnPlacePageCategory, play_placeId == Roblox.VideoPreRoll.specificAdOnPlacePageId && Roblox.VideoPreRoll.videoOptions.categories.indexOf(i) == -1 && (Roblox.VideoPreRoll.videoOptions.categories += i)), r = __adaptv__, this.myvpaidad = new r.ads.vpaid.VPAIDAd(\"videoPrerollMainDiv\"), t = 1e3, LoadingBar.init(this.loadingBarID, this.loadingBarInnerID, this.loadingBarPercentageID), this.loadingBarIntervalID = setInterval(function () {\n Roblox.VideoPreRoll.loadingBarCurrentTime += t, LoadingBar.update(Roblox.VideoPreRoll.loadingBarID, Roblox.VideoPreRoll.loadingBarCurrentTime / Roblox.VideoPreRoll.loadingBarMaxTime);\n }, t), n = r.ads.vpaid.VPAIDEvent;\n this.myvpaidad.on(n.AdLoaded, function (n) {\n Roblox.VideoPreRoll._onVideoLoaded(n);\n });\n this.myvpaidad.on(n.AdStarted, function (n) {\n Roblox.VideoPreRoll._onVideoStart(n);\n });\n this.myvpaidad.on(n.AdStopped, function (n) {\n Roblox.VideoPreRoll._onVideoComplete(n);\n });\n this.myvpaidad.on(n.AdError, function (n) {\n Roblox.VideoPreRoll._onVideoError(n);\n });\n\n try {\n this.myvpaidad.initAd(391, 312, this.videoOptions);\n } catch (u) {\n f();\n }\n },\n error: function error() {\n clearInterval(loadingBarInterval);\n },\n cancel: function cancel() {\n this.videoCancelled = !0, $.modal.close();\n },\n skip: function skip() {\n this.videoCompleted = !0, this.videoSkipped = !0, this.showVideoPreRoll = !1;\n },\n close: function close() {\n MadStatus.running && MadStatus.stop(\"\"), RobloxLaunch.launcher && (RobloxLaunch.launcher._cancelled = !0), clearInterval(this.loadingBarIntervalID), LoadingBar.dispose(this.loadingBarID);\n\n try {\n this.myvpaidad.stopAd();\n } catch (n) {}\n\n this.isPlaying() && (this.videoCancelled = !0), $.modal.close(), this.logVideoPreRoll();\n },\n _onVideoError: function f() {\n this.videoCompleted = !0, this.videoErrored = !0;\n },\n _onVideoLoaded: function _onVideoLoaded(n) {\n try {\n this.myvpaidad.startAd();\n } catch (t) {\n f(n);\n }\n },\n _onVideoStart: function _onVideoStart() {\n this.videoStarted = !0;\n },\n _onVideoComplete: function _onVideoComplete() {\n this.videoStarted && this.videoCancelled == !1 && (this.videoCompleted = !0, this.showVideoPreRoll = !1, this.newValue != \"\" && $.cookie(\"RBXVPR\", this.newValue, 180));\n },\n logVideoPreRoll: function logVideoPreRoll() {\n if (Roblox.VideoPreRoll.logsEnabled) {\n var n = \"\";\n if (Roblox.VideoPreRoll.videoCompleted) n = \"Complete\", Roblox.VideoPreRoll.videoLogNote == \"\" && (Roblox.VideoPreRoll.videoLogNote = \"NoTimeout\"), Roblox.VideoPreRoll.logsEnabled = !1;else if (Roblox.VideoPreRoll.videoCancelled) n = \"Cancelled\", Roblox.VideoPreRoll.videoLogNote = RobloxLaunch.state;else if (Roblox.VideoPreRoll.videoInitialized == !1 && Roblox.VideoPreRoll.videoLogNote != \"\") n = \"Failed\", Roblox.VideoPreRoll.logsEnabled = !1;else return;\n GoogleAnalyticsEvents.FireEvent([\"PreRoll\", n, Roblox.VideoPreRoll.videoLogNote]);\n }\n },\n isPlaying: function isPlaying() {\n return Roblox.VideoPreRoll.videoInitialized ? (Roblox.VideoPreRoll.videoInitialized && !Roblox.VideoPreRoll.videoStarted && Roblox.VideoPreRoll.loadingBarCurrentTime > Roblox.VideoPreRoll.videoLoadingTimeout && (Roblox.VideoPreRoll.videoCompleted = !0, Roblox.VideoPreRoll.videoLogNote = \"LoadingTimeout\"), Roblox.VideoPreRoll.videoStarted && !Roblox.VideoPreRoll.videoCompleted && Roblox.VideoPreRoll.loadingBarCurrentTime > Roblox.VideoPreRoll.videoPlayingTimeout && (Roblox.VideoPreRoll.videoCompleted = !0, Roblox.VideoPreRoll.videoLogNote = \"PlayingTimeout\"), !Roblox.VideoPreRoll.videoCompleted) : !1;\n },\n correctIEModalPosition: function correctIEModalPosition(n) {\n if (n.container.innerHeight() <= 30) {\n var i = $(\"#videoPrerollPanel\"),\n t = -Math.floor(i.innerHeight() / 2);\n i.css({\n position: \"relative\",\n top: t + \"px\"\n }), n.container.find(\".VprCloseButton\").css({\n top: t - 10 + \"px\",\n \"z-index\": \"1003\"\n });\n }\n },\n test: function test() {\n _popupOptions = {\n escClose: !0,\n opacity: 80,\n overlayCss: {\n backgroundColor: \"#000\"\n },\n onShow: function onShow(n) {\n Roblox.VideoPreRoll.correctIEModalPosition(n), Roblox.VideoPreRoll.start();\n },\n onClose: function onClose() {\n Roblox.VideoPreRoll.close();\n },\n closeHTML: ''\n }, $(\"#videoPrerollPanel\").modal(_popupOptions), MadStatus.running || (MadStatus.init($(\"#videoPrerollPanel\").find(\".MadStatusField\"), $(\"#videoPrerollPanel\").find(\".MadStatusBackBuffer\"), 2e3, 800), MadStatus.start()), $(\"#videoPrerollPanel\").find(\".MadStatusStarting\").css(\"display\", \"none\"), $(\"#videoPrerollPanel\").find(\".MadStatusSpinner\").css(\"visibility\", status === 3 || status === 4 || status === 5 ? \"hidden\" : \"visible\");\n }\n};\nvar LoadingBar = {\n bars: [],\n init: function init(n, t, i, r) {\n var u = this.get(n);\n u == null && (u = {}), u.barID = n, u.innerBarID = t, u.percentageID = i, typeof r == \"undefined\" && (u.percentComplete = 0), this.bars.push(u), this.update(n, u.percentComplete);\n },\n get: function get(n) {\n for (var t = 0; t < this.bars.length; t++) {\n if (this.bars[t].barID == n) return this.bars[t];\n }\n\n return null;\n },\n dispose: function dispose(n) {\n for (var t = 0; t < this.bars.length; t++) {\n this.bars[t].barID == n && this.bars.splice(t, 1);\n }\n },\n update: function update(n, t) {\n var i = this.get(n),\n u,\n r;\n i && (t > 1 && (t = 1), u = $(\"#\" + n).width(), r = Math.round(u * t), $(\"#\" + i.innerBarID).animate({\n width: r\n }, 200, \"swing\"), i.percentageID && $(\"#\" + i.percentageID).length > 0 && $(\"#\" + i.percentageID).html(Math.round(t * 100) + \"%\"), i.percentComplete = t);\n }\n}; // end roblox.js//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYXBwLmpzPzZkNDAiXSwibmFtZXMiOlsibiIsInQiLCJwIiwiaSIsInIiLCJzcGxpdCIsInNoaWZ0IiwibGVuZ3RoIiwiayIsInUiLCJudCIsImYiLCJjcmVhdGVFbGVtZW50IiwiaHJlZiIsInJlbCIsInR5cGUiLCJwYXJlbnROb2RlIiwiaW5zZXJ0QmVmb3JlIiwiZyIsInNyYyIsIm9ubG9hZCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJkIiwicG9wIiwibyIsImluZGV4T2YiLCJtb2R1bGVQYXRoIiwicmVwbGFjZSIsInYiLCJiYXNlVXJsIiwidmVyc2lvbnMiLCJzIiwiUm9ibG94IiwicHVzaCIsImUiLCJsb2FkZWQiLCJkZXBzTG9hZGVkIiwibGlzdGVuZXJzIiwiYSIsImgiLCJiIiwiZXh0ZXJuYWxSZXNvdXJjZXMiLCJ0b1N0cmluZyIsImwiLCJjIiwiYXBwbHkiLCJzbGljZSIsInkiLCJ3IiwidW5zaGlmdCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJjYWxsIiwiY29uZmlnIiwicmVxdWlyZSIsImRlZmluZSIsIndpbmRvdyIsInRvSlNPTiIsIkpTT04iLCJzdHJpbmdpZnkiLCJ1bmRlZmluZWQiLCJxdW90ZVN0cmluZyIsImNvbnN0cnVjdG9yIiwiRGF0ZSIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0Z1bGxZZWFyIiwiZ2V0VVRDSG91cnMiLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsIkFycmF5Iiwiam9pbiIsImV2YWxKU09OIiwicGFyc2UiLCJldmFsIiwic2VjdXJlRXZhbEpTT04iLCJ0ZXN0IiwiU3ludGF4RXJyb3IiLCJtYXRjaCIsImNoYXJDb2RlQXQiLCJNYXRoIiwiZmxvb3IiLCJqUXVlcnkiLCJicm93c2VyIiwibXNpZSIsInBhcnNlSW50IiwidmVyc2lvbiIsIlhNTEh0dHBSZXF1ZXN0IiwibW9kYWwiLCJpbXBsIiwiaW5pdCIsImNsb3NlIiwiZm4iLCJkZWZhdWx0cyIsImFwcGVuZFRvIiwiZm9jdXMiLCJvcGFjaXR5Iiwib3ZlcmxheUlkIiwib3ZlcmxheUNzcyIsImNvbnRhaW5lcklkIiwiY29udGFpbmVyQ3NzIiwiZGF0YUlkIiwiZGF0YUNzcyIsIm1pbkhlaWdodCIsIm1pbldpZHRoIiwibWF4SGVpZ2h0IiwibWF4V2lkdGgiLCJhdXRvUmVzaXplIiwiYXV0b1Bvc2l0aW9uIiwiekluZGV4IiwiY2xvc2VIVE1MIiwiY2xvc2VDbGFzcyIsImVzY0Nsb3NlIiwib3ZlcmxheUNsb3NlIiwicG9zaXRpb24iLCJwZXJzaXN0Iiwib25PcGVuIiwib25TaG93Iiwib25DbG9zZSIsImRhdGEiLCJleHRlbmQiLCJvY2NiIiwicGxhY2Vob2xkZXIiLCJwYXJlbnQiLCJzaXplIiwiYmVmb3JlIiwiYXR0ciIsImNzcyIsImRpc3BsYXkiLCJvcmlnIiwiY2xvbmUiLCJodG1sIiwiYWxlcnQiLCJjcmVhdGUiLCJvcGVuIiwiaXNGdW5jdGlvbiIsImdldERpbWVuc2lvbnMiLCJpZnJhbWUiLCJpZnJhbWVDc3MiLCJoZWlnaHQiLCJ3aWR0aCIsInRvcCIsImxlZnQiLCJvdmVybGF5IiwiYWRkQ2xhc3MiLCJjb250YWluZXIiLCJhcHBlbmQiLCJ3cmFwIiwib3V0bGluZSIsIm92ZXJmbG93Iiwic2V0Q29udGFpbmVyRGltZW5zaW9ucyIsImZpeElFIiwiYmluZEV2ZW50cyIsImJpbmQiLCJwcmV2ZW50RGVmYXVsdCIsImtleUNvZGUiLCJ3YXRjaFRhYiIsInVuYmluZEV2ZW50cyIsInVuYmluZCIsImVhY2giLCJzdHlsZSIsInJlbW92ZUV4cHJlc3Npb24iLCJzZXRFeHByZXNzaW9uIiwib3BlcmEiLCJqcXVlcnkiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGllbnRIZWlnaHQiLCJpbm5lckhlaWdodCIsImdldFZhbCIsIm91dGVySGVpZ2h0Iiwib3V0ZXJXaWR0aCIsInNldFBvc2l0aW9uIiwidGFyZ2V0IiwicGFyZW50cyIsImlucHV0cyIsInNoaWZ0S2V5Iiwic2V0VGltZW91dCIsInNob3ciLCJyZXBsYWNlV2l0aCIsInJlbW92ZUNsYXNzIiwiaGlkZSIsInJlbW92ZSIsInRpcHN5IiwiZWxlbWVudE9wdGlvbnMiLCJob3ZlciIsInJlbW92ZUF0dHIiLCJ0aXRsZSIsImZpbmQiLCJmYWxsYmFjayIsIm9mZnNldCIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiZ2V0IiwiY2xhc3NOYW1lIiwidmlzaWJpbGl0eSIsImJvZHkiLCJncmF2aXR5IiwiY2hhckF0IiwiZmFkZSIsImFuaW1hdGUiLCJzdG9wIiwiZmFkZU91dCIsIm1ldGFkYXRhIiwiYXV0b05TIiwic2Nyb2xsVG9wIiwiYXV0b1dFIiwic2Nyb2xsTGVmdCIsIlJvYmxveFRodW1icyIsIiQiLCJVc2VySUQiLCJUaHVtYm5haWxGb3JtYXRJRCIsInN1YnN0cmluZyIsIkdlbmVyYXRlQXZhdGFyVGh1bWIiLCJTdHJpbmciLCJlc2NhcGVIVE1MIiwiSW5pdFN0cmluZ1RydW5jYXRvciIsImlzSW5pdGlhbGl6ZWQiLCJmaXRTdHJpbmdTcGFuIiwicGFkZGluZyIsImFwcGVuZENoaWxkIiwiZml0U3RyaW5nVG9XaWR0aCIsImlubmVySFRNTCIsImZpdFN0cmluZ1RvV2lkdGhTYWZlIiwibGFzdEluZGV4T2YiLCJsYXN0SW5kZXgiLCJpc0Zpbml0ZSIsImhhc093blByb3BlcnR5IiwidmFsdWVPZiIsIk51bWJlciIsIkJvb2xlYW4iLCJFcnJvciIsIlN5cyIsIkJyb3dzZXIiLCJXZWJLaXQiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJhZ2VudCIsInBhcnNlRmxvYXQiLCJuYW1lIiwiR29vZ2xlQW5hbHl0aWNzRXZlbnRzIiwiRmlyZUV2ZW50IiwiX2dhcSIsImNvbmNhdCIsIkZpeGVkVUkiLCJwYWdlWU9mZnNldCIsImd1dHRlckFkc0VuYWJsZWQiLCJzY3JvbGwiLCJpbm5lcldpZHRoIiwidG9Mb3dlckNhc2UiLCJsb2FkIiwicmVzaXplIiwiaXNNb2JpbGUiLCJ1bmZpeEhlYWRlciIsImNvb2tpZSIsImV4cGlyZXMiLCJ0b1VUQ1N0cmluZyIsInNldFRpbWUiLCJnZXRUaW1lIiwicGF0aCIsImRvbWFpbiIsInNlY3VyZSIsImVuY29kZVVSSUNvbXBvbmVudCIsInRyaW0iLCJkZWNvZGVVUklDb21wb25lbnQiLCJSb2Jsb3hKU09OQ29va2llIiwiX2Nvb2tpZW5hbWUiLCJnZXRKU09OQ29va2llIiwic2V0SlNPTkNvb2tpZSIsInJlbW92ZUpTT05Db29raWUiLCJKU09OQ29va2llIiwiRGVsZXRlIiwiU2V0T2JqIiwiU2V0SlNPTiIsIkdldE9iaiIsIkdldEpTT04iLCJYc3JmVG9rZW4iLCJhbGxVcmxzRW5hYmxlZCIsImFqYXhQcmVmaWx0ZXIiLCJkYXRhVHlwZSIsInVybCIsInBhcmFtIiwidG9rZW4iLCJlcnJvciIsInN0YXR1cyIsImdldFJlc3BvbnNlSGVhZGVyIiwiYWpheCIsInNldFRva2VuIiwiZ2V0VG9rZW4iLCJhZGRFbmFibGVkVXJsIiwiUkJYQmFzZUV2ZW50TGlzdGVuZXIiLCJldmVudEtleSIsImV2ZW50cyIsInByb3h5IiwibG9jYWxDb3B5IiwiaGFuZGxlRXZlbnQiLCJkaXN0aWxsRGF0YSIsImNvbnNvbGUiLCJsb2ciLCJmaXJlRXZlbnQiLCJSb2Jsb3hFdmVudE1hbmFnZXIiLCJSZWdFeHAiLCJleGVjIiwiZW5hYmxlZCIsImluaXRpYWxpemVkIiwiZXZlbnRRdWV1ZSIsImluaXRpYWxpemUiLCJ0cmlnZ2VyRXZlbnQiLCJldmVudE5hbWUiLCJhcmdzIiwiZ2V0TWFya2V0aW5nR3VpZCIsImJyb3dzZXJpZCIsImd1aWQiLCJ0cmlnZ2VyIiwicmVnaXN0ZXJDb29raWVTdG9yZUV2ZW50IiwiaW5zZXJ0RGF0YVN0b3JlS2V5VmFsdWVQYWlyIiwibW9uaXRvckNvb2tpZVN0b3JlIiwiQ2xpZW50IiwibG9jYXRpb24iLCJwcm90b2NvbCIsIkNyZWF0ZUxhdW5jaGVyIiwiR2V0S2V5VmFsdWUiLCJ1c2VyVHlwZSIsInVzZXJJZCIsIlNldEtleVZhbHVlIiwiUmVsZWFzZUxhdW5jaGVyIiwiUm9ibG94TGlzdGVuZXIiLCJldmVudFRvU3RyaW5nIiwiZGF0YUtleSIsInJlc3RVcmwiLCJhcmciLCJLb250YWdlbnRMaXN0ZW5lciIsIkFQSUtleSIsIlN0YWdpbmdBUElLZXkiLCJTdGFnaW5nRXZlbnRzIiwidHMiLCJ1c2VyX2lwIiwiYWdlIiwiZ2VuZGVyIiwidG90YWwiLCJyb3VuZCIsInByb2R1Y3ROYW1lIiwicHJvdmlkZXIiLCJjYXRlZ29yeSIsInRyYWNraW5nIiwic2hvcnR0cmFja2luZyIsInRyYWNraW5ndGFnIiwiZXZlbnRUeXBlIiwib3MiLCJwbGFjZUlkIiwiZXhwZXJpbWVudCIsInZhcmlhdGlvbiIsInBhZ2UiLCJvcHQxIiwib3B0MiIsImluc3RhbGxlZCIsInNvdXJjZVR5cGUiLCJzb3VyY2UiLCJjYW1wYWlnbiIsIm1lZGl1bSIsIm1lcmNoYW50IiwiY2FyZFZhbHVlIiwiYWN0aW9uIiwiaXNTdGFnaW5nRXZlbnQiLCJzdGFnaW5nIiwic3QxIiwiR29vZ2xlTGlzdGVuZXIiLCJvcHRfbGFiZWwiLCJvcHRfdmFsdWUiLCJNb25nb0xpc3RlbmVyIiwic2hhcmQiLCJkZWZhdWx0U2hhcmQiLCJkYXRhTWFwIiwibXNnIiwibGluZSIsInVhIiwiZ2V0Q2F0ZWdvcnlGcm9tRXZlbnROYW1lIiwiaXAiLCJjbGllbnRJcEFkZHJlc3MiLCJsb2dnaW5nVVJJIiwianNvbnBDYWxsYmFjayIsImNhbGxiYWNrIiwiU2VhcmNoVmlzaW9uTGlzdGVuZXIiLCJlc3Z0a192IiwiZXN2dGtfZXN2aWQiLCJldmVudCIsIm9yZGVyaWQiLCJlc3Z0a190cmFjayIsIlNpdGVUb3VjaEV2ZW50IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsImlzTmFOIiwidXNlTG9jYWxTdG9yYWdlIiwicmVtb3ZlSXRlbSIsInNldEl0ZW0iLCJkYXRlRGlmZlRocmVzaG9sZEluSG91cnMiLCJ1cGRhdGVMYXN0QWN0aXZpdHlBbmRGaXJlRXZlbnQiLCJnZXRMYXN0QWN0aXZpdHkiLCJzZXRMYXN0QWN0aXZpdHkiLCJKU0Vycm9yVHJhY2tlciIsInNob3dBbGVydCIsImRlZmF1bHRQaXhlbCIsImludGVybmFsRXZlbnRMaXN0ZW5lclBpeGVsRW5hYmxlZCIsImphdmFzY3JpcHRTdGFja1RyYWNlRW5hYmxlZCIsImFkZE9uRXJyb3JFdmVudEhhbmRsZXIiLCJlcnJvckhhbmRsZXIiLCJsb2dFeGNlcHRpb24iLCJvbmVycm9yIiwicHJvY2Vzc0V4Y2VwdGlvbiIsImZpcmVHQVBpeGVsIiwiZGlzdGlsbEdBRGF0YSIsInNob3dFcnJvck1lc3NhZ2UiLCJjcmVhdGVVUkwiLCJzdHVkaW8yQWxlcnRNb2RhbCIsInNob3dQcm9tcHQiLCJ1cGRhdGVTdHVkaW9BbGVydFVzZXJQcmVmZXJlbmNlIiwiYmFja2dyb3VuZENvbG9yIiwiaXNJREUiLCJjbGljayIsInRyeVRvRG93bmxvYWQiLCJvSUZybSIsImdldEVsZW1lbnRCeUlkIiwibG9nU3RhdGlzdGljcyIsIlR5cGUiLCJyZWdpc3Rlck5hbWVzcGFjZSIsIl9pbnN0YWxsSG9zdCIsIl9pbnN0YWxsU3VjY2VzcyIsIl9DTFNJRCIsIl9jb250aW51YXRpb24iLCJfc2tpcCIsIl9pc0lERSIsIl9pc1JvYmxveEJyb3dzZXIiLCJfaXNQbGFjZUxhdW5jaCIsIl9zaWxlbnRNb2RlRW5hYmxlZCIsIl9icmluZ0FwcFRvRnJvbnRFbmFibGVkIiwiX251bUxvY2tzIiwiX2xvZ1RpbWluZyIsIl9sb2dTdGFydFRpbWUiLCJfbG9nRW5kVGltZSIsIl9oaWRkZW5Nb2RlRW5hYmxlZCIsIl9ydW5JbnN0YWxsQUJUZXN0IiwiR2V0SW5zdGFsbEhvc3QiLCJBY3RpdmVYT2JqZWN0IiwiSW5zdGFsbEhvc3QiLCJHZXRfSW5zdGFsbEhvc3QiLCJpbml0Q2xpZW50UHJvcHMiLCJIZWxsbyIsImV4dGVybmFsIiwiSXNSb2Jsb3hBcHBJREUiLCJpc1JvYmxveEJyb3dzZXIiLCJyb2Jsb3hCcm93c2VySW5zdGFsbEhvc3QiLCJJc1JvYmxveFByb3h5SW5zdGFsbGVkIiwiSXNSb2Jsb3hJbnN0YWxsZWQiLCJTZXRTdGFydEluSGlkZGVuTW9kZSIsIlVuaGlkZUFwcCIsIlVwZGF0ZSIsIldhaXRGb3JSb2Jsb3giLCJfY2FuY2VsbGVkIiwiSW1wbGVtZW50c1Byb3h5IiwiSW5zdGFsbGF0aW9uSW5zdHJ1Y3Rpb25zIiwicnVuSW5zdGFsbEFCVGVzdCIsImFwcFZlcnNpb24iLCJjaHJvbWUiLCJoYXNoIiwicGxheV9wbGFjZUlkIiwiX29udGltZXIiLCJSZXN1bWVUaW1lciIsIlJlZnJlc2giLCJwbHVnaW5zIiwicmVmcmVzaCIsIl9vbkNhbmNlbCIsIk1hZFN0YXR1cyIsInJ1bm5pbmciLCJ1cGRhdGVJbnRlcnZhbCIsImZhZGVJbnRlcnZhbCIsInRpbWVvdXQiLCJmaWVsZCIsImJhY2tCdWZmZXIiLCJwYXJ0aWNpcGxlIiwibW9kaWZpZXIiLCJzdWJqZWN0IiwibmV3TGliIiwibGliU3RyaW5nIiwicmFuZG9tIiwic3RhcnQiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJtYW51YWxVcGRhdGUiLCJ1cGRhdGUiLCJub0FuaW0iLCJmYWRlSW4iLCJSQlgiLCJSb2Jsb3hMYXVuY2hTdGF0ZXMiLCJTdGFydGluZ1NlcnZlciIsIlN0YXJ0aW5nQ2xpZW50IiwiVXBncmFkaW5nIiwiTm9uZSIsIlJvYmxveExhdW5jaCIsImxhdW5jaEdhbWVQYWdlIiwidGltZXIiLCJjbGllbnRNZXRyaWNUeXBlIiwibGF1bmNoZXIiLCJnb29nbGVBbmFseXRpY3NDYWxsYmFjayIsIl9Hb29nbGVBbmFseXRpY3NDYWxsYmFjayIsInN0YXRlIiwic2VjdXJlQXV0aGVudGljYXRlIiwiUm9ibG94UGxhY2VMYXVuY2hlclNlcnZpY2UiLCJMb2dKb2luQ2xpY2siLCJyZXF1ZXN0IiwiUmVxdWVzdEdhbWUiLCJnZXRKU09OIiwiaXNQYXJ0eUxlYWRlciIsIlJlcXVlc3RQbGF5V2l0aFBhcnR5IiwicGFydHlHdWlkIiwiZ2FtZUlkIiwiUmVxdWVzdEdyb3VwQnVpbGRHYW1lIiwiUmVxdWVzdEZvbGxvd1VzZXIiLCJSZXF1ZXN0R2FtZUpvYiIsImdhbWVKb2JJZCIsIkNoZWNrR2FtZUpvYlN0YXR1cyIsImpvYklkIiwiY2hlY2tSb2Jsb3hJbnN0YWxsIiwiUGxhY2VMYXVuY2hlciIsIlN0YXJ0R2FtZSIsIlNlbGVuaXVtVGVzdE1vZGUiLCJ1cmNoaW5UcmFja2VyIiwiSXNSb2Jsb3hBQkFwcCIsIklzUm9ibG94MkFwcCIsIkF1dGhlbnRpY2F0aW9uVGlja2V0IiwiUHV0X0F1dGhlbnRpY2F0aW9uVGlja2V0IiwiU2V0RWRpdE1vZGUiLCJTZXRTaWxlbnRNb2RlRW5hYmxlZCIsIlZpZGVvUHJlUm9sbCIsInZpZGVvSW5pdGlhbGl6ZWQiLCJpc1BsYXlpbmciLCJDaGVja0dhbWVTdGFydGVkIiwiQnJpbmdBcHBUb0Zyb250IiwicGxheUZyb21VcmwiLCJtZXNzYWdlIiwiSXNHYW1lU3RhcnRlZCIsIkdldF9HYW1lU3RhcnRlZCIsIl9zaG93RGlhbG9nIiwiX3VwZGF0ZVN0YXR1cyIsIkNoZWNrUm9ibG94SW5zdGFsbCIsIl9wb3B1cElEIiwiX3BvcHVwIiwiX3BvcHVwT3B0aW9ucyIsInNob3dWaWRlb1ByZVJvbGwiLCJpc0V4Y2x1ZGVkIiwiY29ycmVjdElFTW9kYWxQb3NpdGlvbiIsImxvZ1ZpZGVvUHJlUm9sbCIsIkNhbmNlbExhdW5jaCIsIl9yZXBvcnREdXJhdGlvbiIsImFzeW5jIiwiY2FjaGUiLCJzdWNjZXNzIiwiX29uR2FtZVN0YXR1cyIsImpvaW5TY3JpcHRVcmwiLCJhdXRoZW50aWNhdGlvblVybCIsImF1dGhlbnRpY2F0aW9uVGlja2V0IiwiX29uR2FtZUVycm9yIiwiX3N0YXJ0VXBkYXRlUG9sbGluZyIsIklzVXBUb0RhdGUiLCJHZXRfSXNVcFRvRGF0ZSIsIlByZVN0YXJ0R2FtZSIsIl9vblVwZGF0ZVN0YXR1cyIsIl9vblVwZGF0ZUVycm9yIiwiQ2hlY2tVcGRhdGVTdGF0dXMiLCJQYXJ0eSIsIkFtSUxlYWRlciIsIl9vbkVycm9yIiwiZGlzcG9zZSIsImNhbGxCYXNlTWV0aG9kIiwib3BlblZpZGVvUHJlcm9sbDIiLCJmbGFzaENoZWNrIiwibWltZVR5cGVzIiwiZGVzY3JpcHRpb24iLCJuZXdWYWx1ZSIsInZpZGVvU3RhcnRlZCIsInZpZGVvQ29tcGxldGVkIiwidmlkZW9Ta2lwcGVkIiwidmlkZW9DYW5jZWxsZWQiLCJ2aWRlb0Vycm9yZWQiLCJ2aWRlb09wdGlvbnMiLCJrZXkiLCJjb21wYW5pb25JZCIsIm15dnBhaWRhZCIsImxvYWRpbmdCYXJNYXhUaW1lIiwibG9hZGluZ0JhckN1cnJlbnRUaW1lIiwibG9hZGluZ0JhckludGVydmFsSUQiLCJsb2FkaW5nQmFySUQiLCJsb2FkaW5nQmFySW5uZXJJRCIsImxvYWRpbmdCYXJQZXJjZW50YWdlSUQiLCJ2aWRlb0xvYWRpbmdUaW1lb3V0IiwidmlkZW9QbGF5aW5nVGltZW91dCIsInZpZGVvTG9nTm90ZSIsImxvZ3NFbmFibGVkIiwiZXhjbHVkZWRQbGFjZUlkcyIsInNwZWNpZmljQWRPblBsYWNlUGFnZUVuYWJsZWQiLCJzcGVjaWZpY0FkT25QbGFjZVBhZ2VJZCIsInNwZWNpZmljQWRPblBsYWNlUGFnZUNhdGVnb3J5IiwiY2hlY2tFbGlnaWJpbGl0eSIsIl9fYWRhcHR2X18iLCJjYXRlZ29yaWVzIiwiYWRzIiwidnBhaWQiLCJWUEFJREFkIiwiTG9hZGluZ0JhciIsIlZQQUlERXZlbnQiLCJvbiIsIkFkTG9hZGVkIiwiX29uVmlkZW9Mb2FkZWQiLCJBZFN0YXJ0ZWQiLCJfb25WaWRlb1N0YXJ0IiwiQWRTdG9wcGVkIiwiX29uVmlkZW9Db21wbGV0ZSIsIkFkRXJyb3IiLCJfb25WaWRlb0Vycm9yIiwiaW5pdEFkIiwibG9hZGluZ0JhckludGVydmFsIiwiY2FuY2VsIiwic2tpcCIsInN0b3BBZCIsInN0YXJ0QWQiLCJiYXJzIiwiYmFySUQiLCJpbm5lckJhcklEIiwicGVyY2VudGFnZUlEIiwicGVyY2VudENvbXBsZXRlIiwic3Bs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QUFVQSxDQUFDLEdBQUcsQ0FBZCxHQUFrQlEsQ0FBQyxHQUFHMk0sQ0FBQyxDQUFDLE1BQU1wTixDQUFQLENBQUQsQ0FBV2dKLEtBQVgsRUFBdEIsRUFBMEM1SSxDQUFDLEdBQUdnRixJQUFJLENBQUNtUSxLQUFMLENBQVc5VSxDQUFDLEdBQUdSLENBQWYsQ0FBOUMsRUFBaUVtTixDQUFDLENBQUMsTUFBTWpOLENBQUMsQ0FBQ2tuQixVQUFULENBQUQsQ0FBc0IxYSxPQUF0QixDQUE4QjtBQUNqRzNELFdBQUssRUFBRTVJO0FBRDBGLEtBQTlCLEVBRXBFLEdBRm9FLEVBRS9ELE9BRitELENBQWpFLEVBRVlELENBQUMsQ0FBQ21uQixZQUFGLElBQWtCbGEsQ0FBQyxDQUFDLE1BQU1qTixDQUFDLENBQUNtbkIsWUFBVCxDQUFELENBQXdCL21CLE1BQXhCLEdBQWlDLENBQW5ELElBQXdENk0sQ0FBQyxDQUFDLE1BQU1qTixDQUFDLENBQUNtbkIsWUFBVCxDQUFELENBQXdCL2UsSUFBeEIsQ0FBNkJuRCxJQUFJLENBQUNtUSxLQUFMLENBQVd0VixDQUFDLEdBQUcsR0FBZixJQUFzQixHQUFuRCxDQUZwRSxFQUU2SEUsQ0FBQyxDQUFDb25CLGVBQUYsR0FBb0J0bkIsQ0FGdEosQ0FBRDtBQUdIO0FBcEJZLENBQWpCLEMsQ0FzQkEiLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvYXBwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy9yZXF1aXJlKCcuL2Jvb3RzdHJhcCcpO1xuXG47IC8vLyBmaWxlczogcm9ibG94LmpzLCBqcXVlcnkuanNvbi0yLjIuanMsIGpxdWVyeS5zaW1wbGVtb2RhbC0xLjMuNS5qcywganF1ZXJ5LnRpcHN5LmpzLCBBamF4QXZhdGFyVGh1bWJuYWlsLmpzLCBleHRlbnNpb25zL3N0cmluZy5qcywgU3RyaW5nVHJ1bmNhdG9yLm1pbi5qcywganNvbjIubWluLmpzLCB3ZWJraXQuanMsIEdvb2dsZUFuYWx5dGljcy9Hb29nbGVBbmFseXRpY3NFdmVudHMuanMsIE1hc3RlclBhZ2VVSS5qcywganF1ZXJ5LmNvb2tpZS5qcywganF1ZXJ5Lmpzb25jb29raWUuanMsIFhzcmZUb2tlbi5qcywgUm9ibG94RXZlbnRNYW5hZ2VyLmpzLCBSb2Jsb3hFdmVudExpc3RlbmVyLmpzLCBLb250YWdlbnRFdmVudExpc3RlbmVyLmpzLCBHb29nbGVFdmVudExpc3RlbmVyLmpzLCBNb25nb0V2ZW50TGlzdGVuZXIuanMsIFNlYXJjaFZpc2lvbkxpc3RlbmVyLmpzLCBTaXRlVG91Y2hFdmVudC5qcywgSlNFcnJvclRyYWNrZXIuanMsIFN0dWRpbzJBbGVydC5qcywgQ2xpZW50SW5zdGFsbGVyLmpzLCBJbnN0YWxsYXRpb25JbnN0cnVjdGlvbnMuanMsIE1hZFN0YXR1cy5qcywgUGxhY2VMYXVuY2hlci5qcywgVmlkZW9QcmVSb2xsLmpzXG5cbjsgLy8vIHJvYmxveC5qc1xuKGZ1bmN0aW9uKG4sIHQpIHtcbiAgICBmdW5jdGlvbiBwKG4sIGkpIHtcbiAgICAgICAgdmFyIHIgPSBpLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgZm9yIChpID0gci5zaGlmdCgpOyByLmxlbmd0aCA+IDA7IG4gPSBuW2ldLCBpID0gci5zaGlmdCgpKVxuICAgICAgICAgICAgaWYgKG5baV0gPT09IHQpIHJldHVybiB0O1xuICAgICAgICByZXR1cm4gbltpXVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGsobiwgaSwgcikge1xuICAgICAgICB2YXIgdSA9IGkuc3BsaXQoXCIuXCIpO1xuICAgICAgICBmb3IgKGkgPSB1LnNoaWZ0KCk7IHUubGVuZ3RoID4gMDsgbiA9IG5baV0sIGkgPSB1LnNoaWZ0KCkpIG5baV0gPT09IHQgJiYgKG5baV0gPSB7fSk7XG4gICAgICAgIG5baV0gPSByXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbnQobiwgdCkge1xuICAgICAgICB2YXIgaSA9IGYuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG4gICAgICAgIGkuaHJlZiA9IG4sIGkucmVsID0gXCJzdHlsZXNoZWV0XCIsIGkudHlwZSA9IFwidGV4dC9jc3NcIiwgdS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpLCB1KSwgdCgpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZyhuLCB0KSB7XG4gICAgICAgIHZhciBpID0gZi5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICBpLnR5cGUgPSBcInRleHQvamF2YXNjcmlwdFwiLCBpLnNyYyA9IG4sIGkub25sb2FkID0gaS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGkucmVhZHlTdGF0ZSAmJiBpLnJlYWR5U3RhdGUgIT0gXCJsb2FkZWRcIiAmJiBpLnJlYWR5U3RhdGUgIT0gXCJjb21wbGV0ZVwiIHx8ICh0KCksIGkub25sb2FkID0gaS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsKVxuICAgICAgICB9LCB1LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGksIHUpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZChuKSB7XG4gICAgICAgIHJldHVybiBuLnNwbGl0KFwiLlwiKS5wb3AoKS5zcGxpdChcIj9cIikuc2hpZnQoKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG8obikge1xuICAgICAgICByZXR1cm4gbi5pbmRleE9mKFwiLmpzXCIpIDwgMCA/IG4gOiBuLmluZGV4T2Yoci5tb2R1bGVQYXRoKSA+PSAwID8gbi5zcGxpdChyLm1vZHVsZVBhdGgpLnBvcCgpLnNwbGl0KFwiLmpzXCIpLnNoaWZ0KCkucmVwbGFjZShcIi9cIiwgXCIuXCIpIDogblxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHYobikge1xuICAgICAgICB2YXIgdCwgaTtcbiAgICAgICAgcmV0dXJuIHQgPSBuLmluZGV4T2YoXCIuanNcIikgPj0gMCB8fCBuLmluZGV4T2YoXCIuY3NzXCIpID49IDAgPyBuIDogci5iYXNlVXJsICsgci5tb2R1bGVQYXRoICsgbi5yZXBsYWNlKFwiLlwiLCBcIi9cIikgKyBcIi5qc1wiLCBpID0gci52ZXJzaW9uc1t0XSB8fCAxLCB0ICsgXCI/dj1cIiArIGlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzKG4pIHtcbiAgICAgICAgZm9yICh2YXIgciwgdSA9IFtdLCBpID0gMDsgaSA8IG4ubGVuZ3RoOyBpKyspIHIgPSBwKFJvYmxveCwgbyhuW2ldKSksIHIgIT09IHQgJiYgdS5wdXNoKHIpO1xuICAgICAgICByZXR1cm4gdVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGUobikge1xuICAgICAgICB2YXIgdCA9IGlbbl07XG4gICAgICAgIGlmICh0LmxvYWRlZCAmJiB0LmRlcHNMb2FkZWQpXG4gICAgICAgICAgICB3aGlsZSAodC5saXN0ZW5lcnMubGVuZ3RoID4gMCkgdC5saXN0ZW5lcnMuc2hpZnQoKSgpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYShuLCB1KSB7XG4gICAgICAgIHZhciBmLCBzLCBoO1xuICAgICAgICBpZiAoIWIobikgfHwgci5leHRlcm5hbFJlc291cmNlcy50b1N0cmluZygpLmluZGV4T2YobikgPj0gMCkgcmV0dXJuIHUoKTtcbiAgICAgICAgZiA9IG8obiksIGlbZl0gPT09IHQgPyAoaVtmXSA9IHtcbiAgICAgICAgICAgIGxvYWRlZDogITEsXG4gICAgICAgICAgICBkZXBzTG9hZGVkOiAhMCxcbiAgICAgICAgICAgIGxpc3RlbmVyczogW11cbiAgICAgICAgfSwgaVtmXS5saXN0ZW5lcnMucHVzaCh1KSwgcyA9IHYoZiksIGggPSBkKHMpID09IFwiY3NzXCIgPyBudCA6IGcsIGgocywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpW2ZdLmxvYWRlZCA9ICEwLCBlKGYpXG4gICAgICAgIH0pKSA6IChpW2ZdLmxpc3RlbmVycy5wdXNoKHUpLCBlKGYpKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGgobiwgdCkge1xuICAgICAgICB2YXIgciA9IG4uc2hpZnQoKSxcbiAgICAgICAgICAgIGkgPSBuLmxlbmd0aCA9PSAwID8gdCA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGgobiwgdClcbiAgICAgICAgICAgIH07XG4gICAgICAgIGEociwgaSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsKG4sIHQpIHtcbiAgICAgICAgYyhuKSB8fCAobiA9IFtuXSk7XG4gICAgICAgIHZhciBpID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0LmFwcGx5KG51bGwsIHMobikpXG4gICAgICAgIH07XG4gICAgICAgIGgobi5zbGljZSgwKSwgaSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB5KG4sIHQsIHIpIHtcbiAgICAgICAgdyh0KSA/IChyID0gdCwgdCA9IFtdKSA6IGModCkgfHwgKHQgPSBbdF0pLCBpW25dID0gaVtuXSB8fCB7XG4gICAgICAgICAgICBsb2FkZWQ6ICEwLFxuICAgICAgICAgICAgbGlzdGVuZXJzOiBbXVxuICAgICAgICB9LCBpW25dLmRlcHNMb2FkZWQgPSAhMSwgaVtuXS5saXN0ZW5lcnMudW5zaGlmdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGsoUm9ibG94LCBuLCByLmFwcGx5KG51bGwsIHModCkpKVxuICAgICAgICB9KSwgbCh0LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlbbl0uZGVwc0xvYWRlZCA9ICEwLCBlKG4pXG4gICAgICAgIH0pXG4gICAgfVxuICAgIHZhciBmID0gbi5kb2N1bWVudCxcbiAgICAgICAgdSA9IGYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIilbMF0sXG4gICAgICAgIGIgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIG4gPT0gXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBjID0gZnVuY3Rpb24obikge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKSA9PSBcIltvYmplY3QgQXJyYXldXCJcbiAgICAgICAgfSxcbiAgICAgICAgdyA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobikgPT0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiXG4gICAgICAgIH0sXG4gICAgICAgIGkgPSB7fSxcbiAgICAgICAgciA9IHtcbiAgICAgICAgICAgIGJhc2VVcmw6IFwiL1wiLFxuICAgICAgICAgICAgbW9kdWxlUGF0aDogXCJqcy9tb2R1bGVzL1wiLFxuICAgICAgICAgICAgdmVyc2lvbnM6IHt9LFxuICAgICAgICAgICAgZXh0ZXJuYWxSZXNvdXJjZXM6IFtdXG4gICAgICAgIH07XG4gICAgdHlwZW9mIFJvYmxveCA9PSBcInVuZGVmaW5lZFwiICYmIChSb2Jsb3ggPSB7fSksIFJvYmxveC5jb25maWcgPSByLCBSb2Jsb3gucmVxdWlyZSA9IGwsIFJvYmxveC5kZWZpbmUgPSB5XG59KSh3aW5kb3cpO1xuXG47IC8vLyBqcXVlcnkuanNvbi0yLjIuanNcbihmdW5jdGlvbihuKSB7XG4gICAgbi50b0pTT04gPSBmdW5jdGlvbih0KSB7XG4gICAgICAgIHZhciBzLCBvLCBwLCBoLCBmLCBlLCByLCB2LCBjLCBhLCB1LCBsLCBpLCB5O1xuICAgICAgICBpZiAodHlwZW9mIEpTT04gPT0gXCJvYmplY3RcIiAmJiBKU09OLnN0cmluZ2lmeSkgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpO1xuICAgICAgICBpZiAoaSA9IHR5cGVvZiB0LCB0ID09PSBudWxsKSByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgIGlmIChpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChpID09IFwibnVtYmVyXCIgfHwgaSA9PSBcImJvb2xlYW5cIikgcmV0dXJuIHQgKyBcIlwiO1xuICAgICAgICBpZiAoaSA9PSBcInN0cmluZ1wiKSByZXR1cm4gbi5xdW90ZVN0cmluZyh0KTtcbiAgICAgICAgaWYgKGkgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0LnRvSlNPTiA9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBuLnRvSlNPTih0LnRvSlNPTigpKTtcbiAgICAgICAgICAgIGlmICh0LmNvbnN0cnVjdG9yID09PSBEYXRlKSByZXR1cm4gcyA9IHQuZ2V0VVRDTW9udGgoKSArIDEsIHMgPCAxMCAmJiAocyA9IFwiMFwiICsgcyksIG8gPSB0LmdldFVUQ0RhdGUoKSwgbyA8IDEwICYmIChvID0gXCIwXCIgKyBvKSwgcCA9IHQuZ2V0VVRDRnVsbFllYXIoKSwgaCA9IHQuZ2V0VVRDSG91cnMoKSwgaCA8IDEwICYmIChoID0gXCIwXCIgKyBoKSwgZiA9IHQuZ2V0VVRDTWludXRlcygpLCBmIDwgMTAgJiYgKGYgPSBcIjBcIiArIGYpLCBlID0gdC5nZXRVVENTZWNvbmRzKCksIGUgPCAxMCAmJiAoZSA9IFwiMFwiICsgZSksIHIgPSB0LmdldFVUQ01pbGxpc2Vjb25kcygpLCByIDwgMTAwICYmIChyID0gXCIwXCIgKyByKSwgciA8IDEwICYmIChyID0gXCIwXCIgKyByKSwgJ1wiJyArIHAgKyBcIi1cIiArIHMgKyBcIi1cIiArIG8gKyBcIlRcIiArIGggKyBcIjpcIiArIGYgKyBcIjpcIiArIGUgKyBcIi5cIiArIHIgKyAnWlwiJztcbiAgICAgICAgICAgIGlmICh0LmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgICAgICAgICAgIGZvciAodiA9IFtdLCBjID0gMDsgYyA8IHQubGVuZ3RoOyBjKyspIHYucHVzaChuLnRvSlNPTih0W2NdKSB8fCBcIm51bGxcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiW1wiICsgdi5qb2luKFwiLFwiKSArIFwiXVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhID0gW107XG4gICAgICAgICAgICBmb3IgKHUgaW4gdCkge1xuICAgICAgICAgICAgICAgIGlmIChpID0gdHlwZW9mIHUsIGkgPT0gXCJudW1iZXJcIikgbCA9ICdcIicgKyB1ICsgJ1wiJztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpID09IFwic3RyaW5nXCIpIGwgPSBuLnF1b3RlU3RyaW5nKHUpO1xuICAgICAgICAgICAgICAgIGVsc2UgY29udGludWU7XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRbdV0gIT0gXCJmdW5jdGlvblwiICYmICh5ID0gbi50b0pTT04odFt1XSksIGEucHVzaChsICsgXCI6XCIgKyB5KSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcIntcIiArIGEuam9pbihcIiwgXCIpICsgXCJ9XCJcbiAgICAgICAgfVxuICAgIH0sIG4uZXZhbEpTT04gPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgSlNPTiA9PSBcIm9iamVjdFwiICYmIEpTT04ucGFyc2UgPyBKU09OLnBhcnNlKG4pIDogZXZhbChcIihcIiArIG4gKyBcIilcIilcbiAgICB9LCBuLnNlY3VyZUV2YWxKU09OID0gZnVuY3Rpb24obikge1xuICAgICAgICBpZiAodHlwZW9mIEpTT04gPT0gXCJvYmplY3RcIiAmJiBKU09OLnBhcnNlKSByZXR1cm4gSlNPTi5wYXJzZShuKTtcbiAgICAgICAgdmFyIHQgPSBuO1xuICAgICAgICBpZiAodCA9IHQucmVwbGFjZSgvXFxcXFtcIlxcXFxcXC9iZm5ydHVdL2csIFwiQFwiKSwgdCA9IHQucmVwbGFjZSgvXCJbXlwiXFxcXFxcblxccl0qXCJ8dHJ1ZXxmYWxzZXxudWxsfC0/XFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK1xcLV0/XFxkKyk/L2csIFwiXVwiKSwgdCA9IHQucmVwbGFjZSgvKD86Xnw6fCwpKD86XFxzKlxcWykrL2csIFwiXCIpLCAvXltcXF0sOnt9XFxzXSokLy50ZXN0KHQpKSByZXR1cm4gZXZhbChcIihcIiArIG4gKyBcIilcIik7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkVycm9yIHBhcnNpbmcgSlNPTiwgc291cmNlIGlzIG5vdCB2YWxpZC5cIik7XG4gICAgfSwgbi5xdW90ZVN0cmluZyA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIG4ubWF0Y2godCkgPyAnXCInICsgbi5yZXBsYWNlKHQsIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgIHZhciB0ID0gaVtuXTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdCA9PSBcInN0cmluZ1wiID8gdCA6ICh0ID0gbi5jaGFyQ29kZUF0KCksIFwiXFxcXHUwMFwiICsgTWF0aC5mbG9vcih0IC8gMTYpLnRvU3RyaW5nKDE2KSArICh0ICUgMTYpLnRvU3RyaW5nKDE2KSlcbiAgICAgICAgfSkgKyAnXCInIDogJ1wiJyArIG4gKyAnXCInXG4gICAgfTtcbiAgICB2YXIgdCA9IC9bXCJcXFxcXFx4MDAtXFx4MWZcXHg3Zi1cXHg5Zl0vZyxcbiAgICAgICAgaSA9IHtcbiAgICAgICAgICAgIFwiXFxiXCI6IFwiXFxcXGJcIixcbiAgICAgICAgICAgIFwiXFx0XCI6IFwiXFxcXHRcIixcbiAgICAgICAgICAgIFwiXFxuXCI6IFwiXFxcXG5cIixcbiAgICAgICAgICAgIFwiXFxmXCI6IFwiXFxcXGZcIixcbiAgICAgICAgICAgIFwiXFxyXCI6IFwiXFxcXHJcIixcbiAgICAgICAgICAgICdcIic6ICdcXFxcXCInLFxuICAgICAgICAgICAgXCJcXFxcXCI6IFwiXFxcXFxcXFxcIlxuICAgICAgICB9XG59KShqUXVlcnkpO1xuXG47IC8vLyBqcXVlcnkuc2ltcGxlbW9kYWwtMS4zLjUuanNcbihmdW5jdGlvbihuKSB7XG4gICAgdmFyIGkgPSBuLmJyb3dzZXIubXNpZSAmJiBwYXJzZUludChuLmJyb3dzZXIudmVyc2lvbikgPT0gNiAmJiB0eXBlb2Ygd2luZG93LlhNTEh0dHBSZXF1ZXN0ICE9IFwib2JqZWN0XCIsXG4gICAgICAgIHIgPSAhMSxcbiAgICAgICAgdCA9IFtdO1xuICAgIG4ubW9kYWwgPSBmdW5jdGlvbih0LCBpKSB7XG4gICAgICAgIHJldHVybiBuLm1vZGFsLmltcGwuaW5pdCh0LCBpKVxuICAgIH0sIG4ubW9kYWwuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgbi5tb2RhbC5pbXBsLmNsb3NlKClcbiAgICB9LCBuLmZuLm1vZGFsID0gZnVuY3Rpb24odCkge1xuICAgICAgICByZXR1cm4gbi5tb2RhbC5pbXBsLmluaXQodGhpcywgdClcbiAgICB9LCBuLm1vZGFsLmRlZmF1bHRzID0ge1xuICAgICAgICBhcHBlbmRUbzogXCJib2R5XCIsXG4gICAgICAgIGZvY3VzOiAhMCxcbiAgICAgICAgb3BhY2l0eTogNTAsXG4gICAgICAgIG92ZXJsYXlJZDogXCJzaW1wbGVtb2RhbC1vdmVybGF5XCIsXG4gICAgICAgIG92ZXJsYXlDc3M6IHt9LFxuICAgICAgICBjb250YWluZXJJZDogXCJzaW1wbGVtb2RhbC1jb250YWluZXJcIixcbiAgICAgICAgY29udGFpbmVyQ3NzOiB7fSxcbiAgICAgICAgZGF0YUlkOiBcInNpbXBsZW1vZGFsLWRhdGFcIixcbiAgICAgICAgZGF0YUNzczoge30sXG4gICAgICAgIG1pbkhlaWdodDogbnVsbCxcbiAgICAgICAgbWluV2lkdGg6IG51bGwsXG4gICAgICAgIG1heEhlaWdodDogbnVsbCxcbiAgICAgICAgbWF4V2lkdGg6IG51bGwsXG4gICAgICAgIGF1dG9SZXNpemU6ICExLFxuICAgICAgICBhdXRvUG9zaXRpb246ICEwLFxuICAgICAgICB6SW5kZXg6IDFlMyxcbiAgICAgICAgY2xvc2U6ICEwLFxuICAgICAgICBjbG9zZUhUTUw6ICc8YSBjbGFzcz1cIm1vZGFsQ2xvc2VJbWdcIiB0aXRsZT1cIkNsb3NlXCI+PC9hPicsXG4gICAgICAgIGNsb3NlQ2xhc3M6IFwic2ltcGxlbW9kYWwtY2xvc2VcIixcbiAgICAgICAgZXNjQ2xvc2U6ICEwLFxuICAgICAgICBvdmVybGF5Q2xvc2U6ICExLFxuICAgICAgICBwb3NpdGlvbjogbnVsbCxcbiAgICAgICAgcGVyc2lzdDogITEsXG4gICAgICAgIG1vZGFsOiAhMCxcbiAgICAgICAgb25PcGVuOiBudWxsLFxuICAgICAgICBvblNob3c6IG51bGwsXG4gICAgICAgIG9uQ2xvc2U6IG51bGxcbiAgICB9LCBuLm1vZGFsLmltcGwgPSB7XG4gICAgICAgIG86IG51bGwsXG4gICAgICAgIGQ6IHt9LFxuICAgICAgICBpbml0OiBmdW5jdGlvbih0LCBpKSB7XG4gICAgICAgICAgICB2YXIgciA9IHRoaXM7XG4gICAgICAgICAgICBpZiAoci5kLmRhdGEpIHJldHVybiAhMTtcbiAgICAgICAgICAgIGlmIChyLm8gPSBuLmV4dGVuZCh7fSwgbi5tb2RhbC5kZWZhdWx0cywgaSksIHIuekluZGV4ID0gci5vLnpJbmRleCwgci5vY2NiID0gITEsIHR5cGVvZiB0ID09IFwib2JqZWN0XCIpIHQgPSB0IGluc3RhbmNlb2YgalF1ZXJ5ID8gdCA6IG4odCksIHIuZC5wbGFjZWhvbGRlciA9ICExLCB0LnBhcmVudCgpLnBhcmVudCgpLnNpemUoKSA+IDAgJiYgKHQuYmVmb3JlKG4oXCI8c3Bhbj48L3NwYW4+XCIpLmF0dHIoXCJpZFwiLCBcInNpbXBsZW1vZGFsLXBsYWNlaG9sZGVyXCIpLmNzcyh7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogXCJub25lXCJcbiAgICAgICAgICAgIH0pKSwgci5kLnBsYWNlaG9sZGVyID0gITAsIHIuZGlzcGxheSA9IHQuY3NzKFwiZGlzcGxheVwiKSwgci5vLnBlcnNpc3QgfHwgKHIuZC5vcmlnID0gdC5jbG9uZSghMCkpKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB0ID09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHQgPT0gXCJudW1iZXJcIikgdCA9IG4oXCI8ZGl2PjwvZGl2PlwiKS5odG1sKHQpO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gYWxlcnQoXCJTaW1wbGVNb2RhbCBFcnJvcjogVW5zdXBwb3J0ZWQgZGF0YSB0eXBlOiBcIiArIHR5cGVvZiB0KSwgcjtcbiAgICAgICAgICAgIHJldHVybiByLmNyZWF0ZSh0KSwgdCA9IG51bGwsIHIub3BlbigpLCBuLmlzRnVuY3Rpb24oci5vLm9uU2hvdykgJiYgci5vLm9uU2hvdy5hcHBseShyLCBbci5kXSksIHJcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlOiBmdW5jdGlvbihyKSB7XG4gICAgICAgICAgICB2YXIgdSA9IHRoaXM7XG4gICAgICAgICAgICB0ID0gdS5nZXREaW1lbnNpb25zKCksIHUuby5tb2RhbCAmJiBpICYmICh1LmQuaWZyYW1lID0gbignPGlmcmFtZSBzcmM9XCJqYXZhc2NyaXB0OmZhbHNlO1wiPjwvaWZyYW1lPicpLmNzcyhuLmV4dGVuZCh1Lm8uaWZyYW1lQ3NzLCB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICAgICAgICAgIGhlaWdodDogdFswXSxcbiAgICAgICAgICAgICAgICB3aWR0aDogdFsxXSxcbiAgICAgICAgICAgICAgICB6SW5kZXg6IHUuby56SW5kZXgsXG4gICAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICAgIGxlZnQ6IDBcbiAgICAgICAgICAgIH0pKS5hcHBlbmRUbyh1Lm8uYXBwZW5kVG8pKSwgdS5kLm92ZXJsYXkgPSBuKFwiPGRpdj48L2Rpdj5cIikuYXR0cihcImlkXCIsIHUuby5vdmVybGF5SWQpLmFkZENsYXNzKFwic2ltcGxlbW9kYWwtb3ZlcmxheVwiKS5jc3Mobi5leHRlbmQodS5vLm92ZXJsYXlDc3MsIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiB1Lm8ub3BhY2l0eSAvIDEwMCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHUuby5tb2RhbCA/IHRbMF0gOiAwLFxuICAgICAgICAgICAgICAgIHdpZHRoOiB1Lm8ubW9kYWwgPyB0WzFdIDogMCxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICAgIHpJbmRleDogdS5vLnpJbmRleCArIDFcbiAgICAgICAgICAgIH0pKS5hcHBlbmRUbyh1Lm8uYXBwZW5kVG8pLCB1LmQuY29udGFpbmVyID0gbihcIjxkaXY+PC9kaXY+XCIpLmF0dHIoXCJpZFwiLCB1Lm8uY29udGFpbmVySWQpLmFkZENsYXNzKFwic2ltcGxlbW9kYWwtY29udGFpbmVyXCIpLmNzcyhuLmV4dGVuZCh1Lm8uY29udGFpbmVyQ3NzLCB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgICAgICAgICB6SW5kZXg6IHUuby56SW5kZXggKyAyXG4gICAgICAgICAgICB9KSkuYXBwZW5kKHUuby5jbG9zZSAmJiB1Lm8uY2xvc2VIVE1MID8gbih1Lm8uY2xvc2VIVE1MKS5hZGRDbGFzcyh1Lm8uY2xvc2VDbGFzcykgOiBcIlwiKS5hcHBlbmRUbyh1Lm8uYXBwZW5kVG8pLCB1LmQud3JhcCA9IG4oXCI8ZGl2PjwvZGl2PlwiKS5hdHRyKFwidGFiSW5kZXhcIiwgLTEpLmFkZENsYXNzKFwic2ltcGxlbW9kYWwtd3JhcFwiKS5jc3Moe1xuICAgICAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgICAgICAgICAgb3V0bGluZTogMCxcbiAgICAgICAgICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6IFwidmlzaWJsZVwiXG4gICAgICAgICAgICB9KS5hcHBlbmRUbyh1LmQuY29udGFpbmVyKSwgdS5kLmRhdGEgPSByLmF0dHIoXCJpZFwiLCByLmF0dHIoXCJpZFwiKSB8fCB1Lm8uZGF0YUlkKS5hZGRDbGFzcyhcInNpbXBsZW1vZGFsLWRhdGFcIikuY3NzKG4uZXh0ZW5kKHUuby5kYXRhQ3NzLCB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogXCJub25lXCJcbiAgICAgICAgICAgIH0pKS5hcHBlbmRUbyhcImJvZHlcIiksIHIgPSBudWxsLCB1LnNldENvbnRhaW5lckRpbWVuc2lvbnMoKSwgdS5kLmRhdGEuYXBwZW5kVG8odS5kLndyYXApLCBpICYmIHUuZml4SUUoKVxuICAgICAgICB9LFxuICAgICAgICBiaW5kRXZlbnRzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciByID0gdGhpcztcbiAgICAgICAgICAgIG4oXCIuXCIgKyByLm8uY2xvc2VDbGFzcykuYmluZChcImNsaWNrLnNpbXBsZW1vZGFsXCIsIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgICAgICBuLnByZXZlbnREZWZhdWx0KCksIHIuY2xvc2UoKVxuICAgICAgICAgICAgfSksIHIuby5tb2RhbCAmJiByLm8uY2xvc2UgJiYgci5vLm92ZXJsYXlDbG9zZSAmJiByLmQub3ZlcmxheS5iaW5kKFwiY2xpY2suc2ltcGxlbW9kYWxcIiwgZnVuY3Rpb24obikge1xuICAgICAgICAgICAgICAgIG4ucHJldmVudERlZmF1bHQoKSwgci5jbG9zZSgpXG4gICAgICAgICAgICB9KSwgbihkb2N1bWVudCkuYmluZChcImtleWRvd24uc2ltcGxlbW9kYWxcIiwgZnVuY3Rpb24obikge1xuICAgICAgICAgICAgICAgIHIuby5tb2RhbCAmJiByLm8uZm9jdXMgJiYgbi5rZXlDb2RlID09IDkgPyByLndhdGNoVGFiKG4pIDogci5vLmNsb3NlICYmIHIuby5lc2NDbG9zZSAmJiBuLmtleUNvZGUgPT0gMjcgJiYgKG4ucHJldmVudERlZmF1bHQoKSwgci5jbG9zZSgpKVxuICAgICAgICAgICAgfSksIG4od2luZG93KS5iaW5kKFwicmVzaXplLnNpbXBsZW1vZGFsXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHQgPSByLmdldERpbWVuc2lvbnMoKSwgci5zZXRDb250YWluZXJEaW1lbnNpb25zKCEwKSwgaSA/IHIuZml4SUUoKSA6IHIuby5tb2RhbCAmJiAoci5kLmlmcmFtZSAmJiByLmQuaWZyYW1lLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogdFswXSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRbMV1cbiAgICAgICAgICAgICAgICB9KSwgci5kLm92ZXJsYXkuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB0WzBdLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogdFsxXVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgdW5iaW5kRXZlbnRzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIG4oXCIuXCIgKyB0aGlzLm8uY2xvc2VDbGFzcykudW5iaW5kKFwiY2xpY2suc2ltcGxlbW9kYWxcIiksIG4oZG9jdW1lbnQpLnVuYmluZChcImtleWRvd24uc2ltcGxlbW9kYWxcIiksIG4od2luZG93KS51bmJpbmQoXCJyZXNpemUuc2ltcGxlbW9kYWxcIiksIHRoaXMuZC5vdmVybGF5LnVuYmluZChcImNsaWNrLnNpbXBsZW1vZGFsXCIpXG4gICAgICAgIH0sXG4gICAgICAgIGZpeElFOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcyxcbiAgICAgICAgICAgICAgICB0ID0gaS5vLnBvc2l0aW9uO1xuICAgICAgICAgICAgbi5lYWNoKFtpLmQuaWZyYW1lIHx8IG51bGwsIGkuby5tb2RhbCA/IGkuZC5vdmVybGF5IDogbnVsbCwgaS5kLmNvbnRhaW5lcl0sIGZ1bmN0aW9uKG4sIGkpIHtcbiAgICAgICAgICAgICAgICB2YXIgbCwgYywgbywgZTtcbiAgICAgICAgICAgICAgICBpZiAoaSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IFwiZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGggPSBcImRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBcImRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhID0gXCJkb2N1bWVudC5ib2R5LnNjcm9sbExlZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBcImRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwID0gXCJkb2N1bWVudC5ib2R5LnNjcm9sbFdpZHRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5ID0gXCJkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB3ID0gXCJkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBcImRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmID0gXCJkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByID0gaVswXS5zdHlsZTtcbiAgICAgICAgICAgICAgICAgICAgci5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIiwgbiA8IDIgPyAoci5yZW1vdmVFeHByZXNzaW9uKFwiaGVpZ2h0XCIpLCByLnJlbW92ZUV4cHJlc3Npb24oXCJ3aWR0aFwiKSwgci5zZXRFeHByZXNzaW9uKFwiaGVpZ2h0XCIsIFwiXCIgKyBiICsgXCIgPiBcIiArIHMgKyBcIiA/IFwiICsgYiArIFwiIDogXCIgKyBzICsgJyArIFwicHhcIicpLCByLnNldEV4cHJlc3Npb24oXCJ3aWR0aFwiLCBcIlwiICsgcCArIFwiID4gXCIgKyBoICsgXCIgPyBcIiArIHAgKyBcIiA6IFwiICsgaCArICcgKyBcInB4XCInKSkgOiAodCAmJiB0LmNvbnN0cnVjdG9yID09IEFycmF5ID8gKG8gPSB0WzBdID8gdHlwZW9mIHRbMF0gPT0gXCJudW1iZXJcIiA/IHRbMF0udG9TdHJpbmcoKSA6IHRbMF0ucmVwbGFjZSgvcHgvLCBcIlwiKSA6IGkuY3NzKFwidG9wXCIpLnJlcGxhY2UoL3B4LywgXCJcIiksIGwgPSBvLmluZGV4T2YoXCIlXCIpID09IC0xID8gbyArIFwiICsgKHQgPSBcIiArIGYgKyBcIiA/IFwiICsgZiArIFwiIDogXCIgKyB2ICsgJykgKyBcInB4XCInIDogcGFyc2VJbnQoby5yZXBsYWNlKC8lLywgXCJcIikpICsgXCIgKiAoKFwiICsgeSArIFwiIHx8IFwiICsgcyArIFwiKSAvIDEwMCkgKyAodCA9IFwiICsgZiArIFwiID8gXCIgKyBmICsgXCIgOiBcIiArIHYgKyAnKSArIFwicHhcIicsIHRbMV0gJiYgKGUgPSB0eXBlb2YgdFsxXSA9PSBcIm51bWJlclwiID8gdFsxXS50b1N0cmluZygpIDogdFsxXS5yZXBsYWNlKC9weC8sIFwiXCIpLCBjID0gZS5pbmRleE9mKFwiJVwiKSA9PSAtMSA/IGUgKyBcIiArICh0ID0gXCIgKyB1ICsgXCIgPyBcIiArIHUgKyBcIiA6IFwiICsgYSArICcpICsgXCJweFwiJyA6IHBhcnNlSW50KGUucmVwbGFjZSgvJS8sIFwiXCIpKSArIFwiICogKChcIiArIHcgKyBcIiB8fCBcIiArIGggKyBcIikgLyAxMDApICsgKHQgPSBcIiArIHUgKyBcIiA/IFwiICsgdSArIFwiIDogXCIgKyBhICsgJykgKyBcInB4XCInKSkgOiAobCA9IFwiKFwiICsgeSArIFwiIHx8IFwiICsgcyArIFwiKSAvIDIgLSAodGhpcy5vZmZzZXRIZWlnaHQgLyAyKSArICh0ID0gXCIgKyBmICsgXCIgPyBcIiArIGYgKyBcIiA6IFwiICsgdiArICcpICsgXCJweFwiJywgYyA9IFwiKFwiICsgdyArIFwiIHx8IFwiICsgaCArIFwiKSAvIDIgLSAodGhpcy5vZmZzZXRXaWR0aCAvIDIpICsgKHQgPSBcIiArIHUgKyBcIiA/IFwiICsgdSArIFwiIDogXCIgKyBhICsgJykgKyBcInB4XCInKSwgci5yZW1vdmVFeHByZXNzaW9uKFwidG9wXCIpLCByLnJlbW92ZUV4cHJlc3Npb24oXCJsZWZ0XCIpLCByLnNldEV4cHJlc3Npb24oXCJ0b3BcIiwgbCksIHIuc2V0RXhwcmVzc2lvbihcImxlZnRcIiwgYykpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgZm9jdXM6IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIHZhciByID0gdGhpcyxcbiAgICAgICAgICAgICAgICB1ID0gdCB8fCBcImZpcnN0XCIsXG4gICAgICAgICAgICAgICAgaSA9IG4oXCI6aW5wdXQ6ZW5hYmxlZDp2aXNpYmxlOlwiICsgdSwgci5kLndyYXApO1xuICAgICAgICAgICAgaS5sZW5ndGggPiAwID8gaS5mb2N1cygpIDogci5kLndyYXAuZm9jdXMoKVxuICAgICAgICB9LFxuICAgICAgICBnZXREaW1lbnNpb25zOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB0ID0gbih3aW5kb3cpLFxuICAgICAgICAgICAgICAgIGkgPSBuLmJyb3dzZXIub3BlcmEgJiYgbi5icm93c2VyLnZlcnNpb24gPiBcIjkuNVwiICYmIG4uZm4uanF1ZXJ5IDw9IFwiMS4yLjZcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgOiBuLmJyb3dzZXIub3BlcmEgJiYgbi5icm93c2VyLnZlcnNpb24gPCBcIjkuNVwiICYmIG4uZm4uanF1ZXJ5ID4gXCIxLjIuNlwiID8gd2luZG93LmlubmVySGVpZ2h0IDogdC5oZWlnaHQoKTtcbiAgICAgICAgICAgIHJldHVybiBbaSwgdC53aWR0aCgpXVxuICAgICAgICB9LFxuICAgICAgICBnZXRWYWw6IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgIHJldHVybiBuID09IFwiYXV0b1wiID8gMCA6IG4uaW5kZXhPZihcIiVcIikgPiAwID8gbiA6IHBhcnNlSW50KG4ucmVwbGFjZSgvcHgvLCBcIlwiKSlcbiAgICAgICAgfSxcbiAgICAgICAgc2V0Q29udGFpbmVyRGltZW5zaW9uczogZnVuY3Rpb24oaSkge1xuICAgICAgICAgICAgdmFyIHIgPSB0aGlzO1xuICAgICAgICAgICAgaWYgKCFpIHx8IGkgJiYgci5vLmF1dG9SZXNpemUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZiA9IG4uYnJvd3Nlci5vcGVyYSA/IHIuZC5jb250YWluZXIuaGVpZ2h0KCkgOiByLmdldFZhbChyLmQuY29udGFpbmVyLmNzcyhcImhlaWdodFwiKSksXG4gICAgICAgICAgICAgICAgICAgIHUgPSBuLmJyb3dzZXIub3BlcmEgPyByLmQuY29udGFpbmVyLndpZHRoKCkgOiByLmdldFZhbChyLmQuY29udGFpbmVyLmNzcyhcIndpZHRoXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgcyA9IHIuZC5kYXRhLm91dGVySGVpZ2h0KCEwKSxcbiAgICAgICAgICAgICAgICAgICAgaCA9IHIuZC5kYXRhLm91dGVyV2lkdGgoITApLFxuICAgICAgICAgICAgICAgICAgICBlID0gci5vLm1heEhlaWdodCAmJiByLm8ubWF4SGVpZ2h0IDwgdFswXSA/IHIuby5tYXhIZWlnaHQgOiB0WzBdLFxuICAgICAgICAgICAgICAgICAgICBvID0gci5vLm1heFdpZHRoICYmIHIuby5tYXhXaWR0aCA8IHRbMV0gPyByLm8ubWF4V2lkdGggOiB0WzFdO1xuICAgICAgICAgICAgICAgIGYgPSBmID8gZiA+IGUgPyBlIDogZiA6IHMgPyBzID4gZSA/IGUgOiBzIDwgci5vLm1pbkhlaWdodCA/IHIuby5taW5IZWlnaHQgOiBzIDogci5vLm1pbkhlaWdodCwgdSA9IHUgPyB1ID4gbyA/IG8gOiB1IDogaCA/IGggPiBvID8gbyA6IGggPCByLm8ubWluV2lkdGggPyByLm8ubWluV2lkdGggOiBoIDogci5vLm1pbldpZHRoLCByLmQuY29udGFpbmVyLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogZixcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgci5vLmF1dG9Qb3NpdGlvbiAmJiByLnNldFBvc2l0aW9uKClcbiAgICAgICAgfSxcbiAgICAgICAgc2V0UG9zaXRpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIG4gPSB0aGlzLFxuICAgICAgICAgICAgICAgIHIsIGksIGYgPSB0WzBdIC8gMiAtIG4uZC5jb250YWluZXIub3V0ZXJIZWlnaHQoITApIC8gMixcbiAgICAgICAgICAgICAgICB1ID0gdFsxXSAvIDIgLSBuLmQuY29udGFpbmVyLm91dGVyV2lkdGgoITApIC8gMjtcbiAgICAgICAgICAgIG4uby5wb3NpdGlvbiAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobi5vLnBvc2l0aW9uKSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiID8gKHIgPSBuLm8ucG9zaXRpb25bMF0gfHwgZiwgaSA9IG4uby5wb3NpdGlvblsxXSB8fCB1KSA6IChyID0gZiwgaSA9IHUpLCBuLmQuY29udGFpbmVyLmNzcyh7XG4gICAgICAgICAgICAgICAgbGVmdDogaSxcbiAgICAgICAgICAgICAgICB0b3A6IHJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIHdhdGNoVGFiOiBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMsXG4gICAgICAgICAgICAgICAgcjtcbiAgICAgICAgICAgIG4odC50YXJnZXQpLnBhcmVudHMoXCIuc2ltcGxlbW9kYWwtY29udGFpbmVyXCIpLmxlbmd0aCA+IDAgPyAoaS5pbnB1dHMgPSBuKFwiOmlucHV0OmVuYWJsZWQ6dmlzaWJsZTpmaXJzdCwgOmlucHV0OmVuYWJsZWQ6dmlzaWJsZTpsYXN0XCIsIGkuZC5kYXRhWzBdKSwgKCF0LnNoaWZ0S2V5ICYmIHQudGFyZ2V0ID09IGkuaW5wdXRzW2kuaW5wdXRzLmxlbmd0aCAtIDFdIHx8IHQuc2hpZnRLZXkgJiYgdC50YXJnZXQgPT0gaS5pbnB1dHNbMF0gfHwgaS5pbnB1dHMubGVuZ3RoID09IDApICYmICh0LnByZXZlbnREZWZhdWx0KCksIHIgPSB0LnNoaWZ0S2V5ID8gXCJsYXN0XCIgOiBcImZpcnN0XCIsIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaS5mb2N1cyhyKVxuICAgICAgICAgICAgfSwgMTApKSkgOiAodC5wcmV2ZW50RGVmYXVsdCgpLCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGkuZm9jdXMoKVxuICAgICAgICAgICAgfSwgMTApKVxuICAgICAgICB9LFxuICAgICAgICBvcGVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB0ID0gdGhpcztcbiAgICAgICAgICAgIHQuZC5pZnJhbWUgJiYgdC5kLmlmcmFtZS5zaG93KCksIG4uaXNGdW5jdGlvbih0Lm8ub25PcGVuKSA/IHQuby5vbk9wZW4uYXBwbHkodCwgW3QuZF0pIDogKHQuZC5vdmVybGF5LnNob3coKSwgdC5kLmNvbnRhaW5lci5zaG93KCksIHQuZC5kYXRhLnNob3coKSksIHQuZm9jdXMoKSwgdC5iaW5kRXZlbnRzKClcbiAgICAgICAgfSxcbiAgICAgICAgY2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGk7XG4gICAgICAgICAgICBpZiAoIXQuZC5kYXRhKSByZXR1cm4gITE7XG4gICAgICAgICAgICB0LnVuYmluZEV2ZW50cygpLCBuLmlzRnVuY3Rpb24odC5vLm9uQ2xvc2UpICYmICF0Lm9jY2IgPyAodC5vY2NiID0gITAsIHQuby5vbkNsb3NlLmFwcGx5KHQsIFt0LmRdKSkgOiAodC5kLnBsYWNlaG9sZGVyID8gKGkgPSBuKFwiI3NpbXBsZW1vZGFsLXBsYWNlaG9sZGVyXCIpLCB0Lm8ucGVyc2lzdCA/IGkucmVwbGFjZVdpdGgodC5kLmRhdGEucmVtb3ZlQ2xhc3MoXCJzaW1wbGVtb2RhbC1kYXRhXCIpLmNzcyhcImRpc3BsYXlcIiwgdC5kaXNwbGF5KSkgOiAodC5kLmRhdGEuaGlkZSgpLnJlbW92ZSgpLCBpLnJlcGxhY2VXaXRoKHQuZC5vcmlnKSkpIDogdC5kLmRhdGEuaGlkZSgpLnJlbW92ZSgpLCB0LmQuY29udGFpbmVyLmhpZGUoKS5yZW1vdmUoKSwgdC5kLm92ZXJsYXkuaGlkZSgpLnJlbW92ZSgpLCB0LmQuaWZyYW1lICYmIHQuZC5pZnJhbWUuaGlkZSgpLnJlbW92ZSgpLCB0LmQgPSB7fSlcbiAgICAgICAgfVxuICAgIH1cbn0pKGpRdWVyeSk7XG5cbjsgLy8vIGpxdWVyeS50aXBzeS5qc1xuKGZ1bmN0aW9uKG4pIHtcbiAgICBuLmZuLnRpcHN5ID0gZnVuY3Rpb24odCkge1xuICAgICAgICByZXR1cm4gdCA9IG4uZXh0ZW5kKHt9LCBuLmZuLnRpcHN5LmRlZmF1bHRzLCB0KSwgdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGkgPSBuLmZuLnRpcHN5LmVsZW1lbnRPcHRpb25zKHRoaXMsIHQpO1xuICAgICAgICAgICAgbih0aGlzKS5ob3ZlcihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgdCwgZSwgcjtcbiAgICAgICAgICAgICAgICBuLmRhdGEodGhpcywgXCJjYW5jZWwudGlwc3lcIiwgITApLCB0ID0gbi5kYXRhKHRoaXMsIFwiYWN0aXZlLnRpcHN5XCIpLCB0IHx8ICh0ID0gbignPGRpdiBjbGFzcz1cInRpcHN5XCI+PGRpdiBjbGFzcz1cInRpcHN5LWlubmVyXCIvPjwvZGl2PicpLCB0LmNzcyh7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIHpJbmRleDogOTk5OTk5XG4gICAgICAgICAgICAgICAgfSksIG4uZGF0YSh0aGlzLCBcImFjdGl2ZS50aXBzeVwiLCB0KSksIChuKHRoaXMpLmF0dHIoXCJ0aXRsZVwiKSB8fCB0eXBlb2Ygbih0aGlzKS5hdHRyKFwib3JpZ2luYWwtdGl0bGVcIikgIT0gXCJzdHJpbmdcIikgJiYgbih0aGlzKS5hdHRyKFwib3JpZ2luYWwtdGl0bGVcIiwgbih0aGlzKS5hdHRyKFwidGl0bGVcIikgfHwgXCJcIikucmVtb3ZlQXR0cihcInRpdGxlXCIpLCB0eXBlb2YgaS50aXRsZSA9PSBcInN0cmluZ1wiID8gZSA9IG4odGhpcykuYXR0cihpLnRpdGxlID09IFwidGl0bGVcIiA/IFwib3JpZ2luYWwtdGl0bGVcIiA6IGkudGl0bGUpIDogdHlwZW9mIGkudGl0bGUgPT0gXCJmdW5jdGlvblwiICYmIChlID0gaS50aXRsZS5jYWxsKHRoaXMpKSwgdC5maW5kKFwiLnRpcHN5LWlubmVyXCIpW2kuaHRtbCA/IFwiaHRtbFwiIDogXCJ0ZXh0XCJdKGUgfHwgaS5mYWxsYmFjayksIHIgPSBuLmV4dGVuZCh7fSwgbih0aGlzKS5vZmZzZXQoKSwge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLm9mZnNldEhlaWdodFxuICAgICAgICAgICAgICAgIH0pLCB0LmdldCgwKS5jbGFzc05hbWUgPSBcInRpcHN5XCIsIHQucmVtb3ZlKCkuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImJsb2NrXCJcbiAgICAgICAgICAgICAgICB9KS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgICAgICAgICB2YXIgZiA9IHRbMF0ub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHUgPSB0WzBdLm9mZnNldEhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgbyA9IHR5cGVvZiBpLmdyYXZpdHkgPT0gXCJmdW5jdGlvblwiID8gaS5ncmF2aXR5LmNhbGwodGhpcykgOiBpLmdyYXZpdHk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChvLmNoYXJBdCgwKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgdC5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogci50b3AgKyByLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiByLmxlZnQgKyByLndpZHRoIC8gMiAtIGYgLyAyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5hZGRDbGFzcyhcInRpcHN5LW5vcnRoXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB0LmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiByLnRvcCAtIHUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogci5sZWZ0ICsgci53aWR0aCAvIDIgLSBmIC8gMlxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuYWRkQ2xhc3MoXCJ0aXBzeS1zb3V0aFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgdC5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogci50b3AgKyByLmhlaWdodCAvIDIgLSB1IC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiByLmxlZnQgLSBmXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5hZGRDbGFzcyhcInRpcHN5LWVhc3RcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHQuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IHIudG9wICsgci5oZWlnaHQgLyAyIC0gdSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogci5sZWZ0ICsgci53aWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuYWRkQ2xhc3MoXCJ0aXBzeS13ZXN0XCIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGkuZmFkZSA/IHQuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJibG9ja1wiLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBcInZpc2libGVcIlxuICAgICAgICAgICAgICAgIH0pLmFuaW1hdGUoe1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAuOFxuICAgICAgICAgICAgICAgIH0pIDogdC5jc3Moe1xuICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBcInZpc2libGVcIlxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBuLmRhdGEodGhpcywgXCJjYW5jZWwudGlwc3lcIiwgITEpO1xuICAgICAgICAgICAgICAgIHZhciB0ID0gdGhpcztcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW4uZGF0YSh0aGlzLCBcImNhbmNlbC50aXBzeVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBuLmRhdGEodCwgXCJhY3RpdmUudGlwc3lcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpLmZhZGUgPyByLnN0b3AoKS5mYWRlT3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4odGhpcykucmVtb3ZlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIDogci5yZW1vdmUoKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgMTAwKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9LCBuLmZuLnRpcHN5LmVsZW1lbnRPcHRpb25zID0gZnVuY3Rpb24odCwgaSkge1xuICAgICAgICByZXR1cm4gbi5tZXRhZGF0YSA/IG4uZXh0ZW5kKHt9LCBpLCBuKHQpLm1ldGFkYXRhKCkpIDogaVxuICAgIH0sIG4uZm4udGlwc3kuZGVmYXVsdHMgPSB7XG4gICAgICAgIGZhZGU6ICExLFxuICAgICAgICBmYWxsYmFjazogXCJcIixcbiAgICAgICAgZ3Jhdml0eTogXCJuXCIsXG4gICAgICAgIGh0bWw6ICExLFxuICAgICAgICB0aXRsZTogXCJ0aXRsZVwiXG4gICAgfSwgbi5mbi50aXBzeS5hdXRvTlMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4odGhpcykub2Zmc2V0KCkudG9wID4gbihkb2N1bWVudCkuc2Nyb2xsVG9wKCkgKyBuKHdpbmRvdykuaGVpZ2h0KCkgLyAyID8gXCJzXCIgOiBcIm5cIlxuICAgIH0sIG4uZm4udGlwc3kuYXV0b1dFID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuKHRoaXMpLm9mZnNldCgpLmxlZnQgPiBuKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkgKyBuKHdpbmRvdykud2lkdGgoKSAvIDIgPyBcImVcIiA6IFwid1wiXG4gICAgfVxufSkoalF1ZXJ5KTtcblxuOyAvLy8gQWpheEF2YXRhclRodW1ibmFpbC5qc1xudmFyIFJvYmxveFRodW1icyA9IGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIG4odCwgaSwgcikge1xuICAgICAgICAkLmdldChcIi90aHVtYnMvcmF3YXZhdGFyLmFzaHhcIiwge1xuICAgICAgICAgICAgVXNlcklEOiBpLFxuICAgICAgICAgICAgVGh1bWJuYWlsRm9ybWF0SUQ6IHJcbiAgICAgICAgfSwgZnVuY3Rpb24odSkge1xuICAgICAgICAgICAgdSA9PSBcIlBFTkRJTkdcIiA/IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIG4odCwgaSwgcilcbiAgICAgICAgICAgIH0sIDNlMykgOiB1LnN1YnN0cmluZyg1LCAwKSA9PSBcIkVSUk9SXCIgfHwgJChcIiNcIiArIHQpLmF0dHIoXCJzcmNcIiwgdSlcbiAgICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgR2VuZXJhdGVBdmF0YXJUaHVtYjogZnVuY3Rpb24odCwgaSwgcikge1xuICAgICAgICAgICAgJChcIiNcIiArIHQpLmF0dHIoXCJzcmNcIiwgXCIvaW1hZ2VzL3NwaW5uZXJzL3dhaXRpbmcuZ2lmXCIpLCBuKHQsIGksIHIpXG4gICAgICAgIH1cbiAgICB9XG59KCk7XG5cbjsgLy8vIGV4dGVuc2lvbnMvc3RyaW5nLmpzXG4kLmV4dGVuZChTdHJpbmcucHJvdG90eXBlLCBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIikucmVwbGFjZSgvPC9nLCBcIiZsdDtcIikucmVwbGFjZSgvPi9nLCBcIiZndDtcIikucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIikucmVwbGFjZSgvJy9nLCBcIiYjMzk7XCIpXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGVzY2FwZUhUTUw6IG5cbiAgICB9XG59KCkpO1xuXG47IC8vLyBTdHJpbmdUcnVuY2F0b3IubWluLmpzXG5mdW5jdGlvbiBJbml0U3RyaW5nVHJ1bmNhdG9yKCkge1xuICAgIGlzSW5pdGlhbGl6ZWQgfHwgKGZpdFN0cmluZ1NwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKSwgZml0U3RyaW5nU3Bhbi5zdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmVcIiwgZml0U3RyaW5nU3Bhbi5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIiwgZml0U3RyaW5nU3Bhbi5zdHlsZS5wYWRkaW5nID0gXCIwcHhcIiwgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmaXRTdHJpbmdTcGFuKSwgaXNJbml0aWFsaXplZCA9ICEwKVxufVxuXG5mdW5jdGlvbiBmaXRTdHJpbmdUb1dpZHRoKG4sIHQsIGkpIHtcbiAgICBmdW5jdGlvbiBmKG4pIHtcbiAgICAgICAgcmV0dXJuIG4ucmVwbGFjZShcIjxcIiwgXCImbHQ7XCIpLnJlcGxhY2UoXCI+XCIsIFwiJmd0O1wiKVxuICAgIH1cbiAgICBpZiAoaXNJbml0aWFsaXplZCB8fCBJbml0U3RyaW5nVHJ1bmNhdG9yKCksIGkgJiYgKGZpdFN0cmluZ1NwYW4uY2xhc3NOYW1lID0gaSksIGkgPSBmKG4pLCBmaXRTdHJpbmdTcGFuLmlubmVySFRNTCA9IGksIGZpdFN0cmluZ1NwYW4ub2Zmc2V0V2lkdGggPiB0KSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCByLCB1ID0gbi5sZW5ndGg7IHIgPSB1IC0gaSA+PiAxOykgciA9IGkgKyByLCBmaXRTdHJpbmdTcGFuLmlubmVySFRNTCA9IGYobi5zdWJzdHJpbmcoMCwgcikpICsgXCImaGVsbGlwO1wiLCBmaXRTdHJpbmdTcGFuLm9mZnNldFdpZHRoID4gdCA/IHUgPSByIDogaSA9IHI7XG4gICAgICAgIGkgPSBuLnN1YnN0cmluZygwLCBpKSArIFwiJmhlbGxpcDtcIlxuICAgIH1cbiAgICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiBmaXRTdHJpbmdUb1dpZHRoU2FmZShuLCB0LCBpKSB7XG4gICAgcmV0dXJuIG4gPSBmaXRTdHJpbmdUb1dpZHRoKG4sIHQsIGkpLCBuLmluZGV4T2YoXCImaGVsbGlwO1wiKSAhPSAtMSAmJiAodCA9IG4ubGFzdEluZGV4T2YoXCIgXCIpLCB0ICE9IC0xICYmIHQgKyAxMCA8PSBuLmxlbmd0aCAmJiAobiA9IG4uc3Vic3RyaW5nKDAsIHQgKyAyKSArIFwiJmhlbGxpcDtcIikpLCBuXG59XG52YXIgaXNJbml0aWFsaXplZCA9ICExLFxuICAgIGZpdFN0cmluZ1NwYW4gPSBudWxsO1xuXG47IC8vLyBqc29uMi5taW4uanNcbnZhciBKU09OO1xuSlNPTiB8fCAoSlNPTiA9IHt9KSxcbiAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgICAgZnVuY3Rpb24gaShuKSB7XG4gICAgICAgICAgICByZXR1cm4gbiA8IDEwID8gXCIwXCIgKyBuIDogblxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZihuKSB7XG4gICAgICAgICAgICByZXR1cm4gby5sYXN0SW5kZXggPSAwLCBvLnRlc3QobikgPyAnXCInICsgbi5yZXBsYWNlKG8sIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgICAgICB2YXIgdCA9IHNbbl07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB0ID09IFwic3RyaW5nXCIgPyB0IDogXCJcXFxcdVwiICsgKFwiMDAwMFwiICsgbi5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpXG4gICAgICAgICAgICB9KSArICdcIicgOiAnXCInICsgbiArICdcIidcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHIoaSwgZSkge1xuICAgICAgICAgICAgdmFyIGMsIGwsIGgsIGEsIHYgPSBuLFxuICAgICAgICAgICAgICAgIHMsIG8gPSBlW2ldO1xuICAgICAgICAgICAgbyAmJiB0eXBlb2YgbyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvLnRvSlNPTiA9PSBcImZ1bmN0aW9uXCIgJiYgKG8gPSBvLnRvSlNPTihpKSksIHR5cGVvZiB0ID09IFwiZnVuY3Rpb25cIiAmJiAobyA9IHQuY2FsbChlLCBpLCBvKSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBvKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZihvKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0Zpbml0ZShvKSA/IFN0cmluZyhvKSA6IFwibnVsbFwiO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvKTtcbiAgICAgICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghbykgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAobiArPSB1LCBzID0gW10sIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkobykgPT09IFwiW29iamVjdCBBcnJheV1cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChhID0gby5sZW5ndGgsIGMgPSAwOyBjIDwgYTsgYyArPSAxKSBzW2NdID0gcihjLCBvKSB8fCBcIm51bGxcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoID0gcy5sZW5ndGggPT09IDAgPyBcIltdXCIgOiBuID8gXCJbXFxuXCIgKyBuICsgcy5qb2luKFwiLFxcblwiICsgbikgKyBcIlxcblwiICsgdiArIFwiXVwiIDogXCJbXCIgKyBzLmpvaW4oXCIsXCIpICsgXCJdXCIsIG4gPSB2LCBoXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgdHlwZW9mIHQgPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYSA9IHQubGVuZ3RoLCBjID0gMDsgYyA8IGE7IGMgKz0gMSkgbCA9IHRbY10sIHR5cGVvZiBsID09IFwic3RyaW5nXCIgJiYgKGggPSByKGwsIG8pLCBoICYmIHMucHVzaChmKGwpICsgKG4gPyBcIjogXCIgOiBcIjpcIikgKyBoKSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCBpbiBvKSBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChvLCBsKSAmJiAoaCA9IHIobCwgbyksIGggJiYgcy5wdXNoKGYobCkgKyAobiA/IFwiOiBcIiA6IFwiOlwiKSArIGgpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGggPSBzLmxlbmd0aCA9PT0gMCA/IFwie31cIiA6IG4gPyBcIntcXG5cIiArIG4gKyBzLmpvaW4oXCIsXFxuXCIgKyBuKSArIFwiXFxuXCIgKyB2ICsgXCJ9XCIgOiBcIntcIiArIHMuam9pbihcIixcIikgKyBcIn1cIiwgbiA9IHYsIGhcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0eXBlb2YgRGF0ZS5wcm90b3R5cGUudG9KU09OICE9IFwiZnVuY3Rpb25cIiAmJiAoRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNGaW5pdGUodGhpcy52YWx1ZU9mKCkpID8gdGhpcy5nZXRVVENGdWxsWWVhcigpICsgXCItXCIgKyBpKHRoaXMuZ2V0VVRDTW9udGgoKSArIDEpICsgXCItXCIgKyBpKHRoaXMuZ2V0VVRDRGF0ZSgpKSArIFwiVFwiICsgaSh0aGlzLmdldFVUQ0hvdXJzKCkpICsgXCI6XCIgKyBpKHRoaXMuZ2V0VVRDTWludXRlcygpKSArIFwiOlwiICsgaSh0aGlzLmdldFVUQ1NlY29uZHMoKSkgKyBcIlpcIiA6IG51bGxcbiAgICAgICAgfSwgU3RyaW5nLnByb3RvdHlwZS50b0pTT04gPSBOdW1iZXIucHJvdG90eXBlLnRvSlNPTiA9IEJvb2xlYW4ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZSA9IC9bXFx1MDAwMFxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nLFxuICAgICAgICAgICAgbyA9IC9bXFxcXFxcXCJcXHgwMC1cXHgxZlxceDdmLVxceDlmXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csXG4gICAgICAgICAgICBuLCB1LCBzID0ge1xuICAgICAgICAgICAgICAgIFwiXFxiXCI6IFwiXFxcXGJcIixcbiAgICAgICAgICAgICAgICBcIlxcdFwiOiBcIlxcXFx0XCIsXG4gICAgICAgICAgICAgICAgXCJcXG5cIjogXCJcXFxcblwiLFxuICAgICAgICAgICAgICAgIFwiXFxmXCI6IFwiXFxcXGZcIixcbiAgICAgICAgICAgICAgICBcIlxcclwiOiBcIlxcXFxyXCIsXG4gICAgICAgICAgICAgICAgJ1wiJzogJ1xcXFxcIicsXG4gICAgICAgICAgICAgICAgXCJcXFxcXCI6IFwiXFxcXFxcXFxcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHQ7XG4gICAgICAgIHR5cGVvZiBKU09OLnN0cmluZ2lmeSAhPSBcImZ1bmN0aW9uXCIgJiYgKEpTT04uc3RyaW5naWZ5ID0gZnVuY3Rpb24oaSwgZiwgZSkge1xuICAgICAgICAgICAgdmFyIG87XG4gICAgICAgICAgICBpZiAobiA9IFwiXCIsIHUgPSBcIlwiLCB0eXBlb2YgZSA9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgIGZvciAobyA9IDA7IG8gPCBlOyBvICs9IDEpIHUgKz0gXCIgXCI7XG4gICAgICAgICAgICBlbHNlIHR5cGVvZiBlID09IFwic3RyaW5nXCIgJiYgKHUgPSBlKTtcbiAgICAgICAgICAgIGlmICh0ID0gZiwgZiAmJiB0eXBlb2YgZiAhPSBcImZ1bmN0aW9uXCIgJiYgKHR5cGVvZiBmICE9IFwib2JqZWN0XCIgfHwgdHlwZW9mIGYubGVuZ3RoICE9IFwibnVtYmVyXCIpKSB0aHJvdyBuZXcgRXJyb3IoXCJKU09OLnN0cmluZ2lmeVwiKTtcbiAgICAgICAgICAgIHJldHVybiByKFwiXCIsIHtcbiAgICAgICAgICAgICAgICBcIlwiOiBpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KSwgdHlwZW9mIEpTT04ucGFyc2UgIT0gXCJmdW5jdGlvblwiICYmIChKU09OLnBhcnNlID0gZnVuY3Rpb24obiwgdCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gcihuLCBpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGYsIGUsIHUgPSBuW2ldO1xuICAgICAgICAgICAgICAgIGlmICh1ICYmIHR5cGVvZiB1ID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICAgICAgICAgIGZvciAoZiBpbiB1KSBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh1LCBmKSAmJiAoZSA9IHIodSwgZiksIGUgIT09IHVuZGVmaW5lZCA/IHVbZl0gPSBlIDogZGVsZXRlIHVbZl0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0LmNhbGwobiwgaSwgdSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgaWYgKG4gPSBTdHJpbmcobiksIGUubGFzdEluZGV4ID0gMCwgZS50ZXN0KG4pICYmIChuID0gbi5yZXBsYWNlKGUsIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXFxcXHVcIiArIChcIjAwMDBcIiArIG4uY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KVxuICAgICAgICAgICAgICAgIH0pKSwgL15bXFxdLDp7fVxcc10qJC8udGVzdChuLnJlcGxhY2UoL1xcXFwoPzpbXCJcXFxcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywgXCJAXCIpLnJlcGxhY2UoL1wiW15cIlxcXFxcXG5cXHJdKlwifHRydWV8ZmFsc2V8bnVsbHwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytcXC1dP1xcZCspPy9nLCBcIl1cIikucmVwbGFjZSgvKD86Xnw6fCwpKD86XFxzKlxcWykrL2csIFwiXCIpKSkgcmV0dXJuIGkgPSBldmFsKFwiKFwiICsgbiArIFwiKVwiKSwgdHlwZW9mIHQgPT0gXCJmdW5jdGlvblwiID8gcih7XG4gICAgICAgICAgICAgICAgXCJcIjogaVxuICAgICAgICAgICAgfSwgXCJcIikgOiBpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiSlNPTi5wYXJzZVwiKTtcbiAgICAgICAgfSlcbiAgICB9KCk7XG5cbjsgLy8vIHdlYmtpdC5qc1xudHlwZW9mIFN5cy5Ccm93c2VyLldlYktpdCA9PSBcInVuZGVmaW5lZFwiICYmIChTeXMuQnJvd3Nlci5XZWJLaXQgPSB7fSksIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIldlYktpdC9cIikgPiAtMSAmJiAoU3lzLkJyb3dzZXIuYWdlbnQgPSBTeXMuQnJvd3Nlci5XZWJLaXQsIFN5cy5Ccm93c2VyLnZlcnNpb24gPSBwYXJzZUZsb2F0KG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1dlYktpdFxcLyhcXGQrKFxcLlxcZCspPykvKVsxXSksIFN5cy5Ccm93c2VyLm5hbWUgPSBcIldlYktpdFwiKTtcblxuOyAvLy8gR29vZ2xlQW5hbHl0aWNzL0dvb2dsZUFuYWx5dGljc0V2ZW50cy5qc1xudmFyIEdvb2dsZUFuYWx5dGljc0V2ZW50cyA9IG5ldyBmdW5jdGlvbigpIHtcbiAgICB0aGlzLkZpcmVFdmVudCA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBfZ2FxICE9IHR5cGVvZiB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhciBpID0gW1wiX3RyYWNrRXZlbnRcIl0sXG4gICAgICAgICAgICAgICAgdCA9IFtcImIuX3RyYWNrRXZlbnRcIl07XG4gICAgICAgICAgICBfZ2FxLnB1c2goaS5jb25jYXQobikpLCBfZ2FxLnB1c2godC5jb25jYXQobikpXG4gICAgICAgIH1cbiAgICB9XG59O1xuXG47IC8vLyBNYXN0ZXJQYWdlVUkuanNcbiQoZnVuY3Rpb24oKSB7XG4gICAgJChcIi50b29sdGlwXCIpLnRpcHN5KCksICQoXCIudG9vbHRpcC10b3BcIikudGlwc3koe1xuICAgICAgICBncmF2aXR5OiBcInNcIlxuICAgIH0pLCAkKFwiLnRvb2x0aXAtcmlnaHRcIikudGlwc3koe1xuICAgICAgICBncmF2aXR5OiBcIndcIlxuICAgIH0pLCAkKFwiLnRvb2x0aXAtbGVmdFwiKS50aXBzeSh7XG4gICAgICAgIGdyYXZpdHk6IFwiZVwiXG4gICAgfSksICQoXCIudG9vbHRpcC1ib3R0b21cIikudGlwc3koe1xuICAgICAgICBncmF2aXR5OiBcIm5cIlxuICAgIH0pXG59KSwgdHlwZW9mIFJvYmxveCA9PSBcInVuZGVmaW5lZFwiICYmIChSb2Jsb3ggPSB7fSksIFJvYmxveC5GaXhlZFVJID0gZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gcygpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYWdlWU9mZnNldCAhPSBcInVuZGVmaW5lZFwiKSByZXR1cm4gcGFnZVlPZmZzZXQ7XG4gICAgICAgIHZhciB0ID0gZG9jdW1lbnQuYm9keSxcbiAgICAgICAgICAgIG4gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBuID0gbi5jbGllbnRIZWlnaHQgPyBuIDogdCwgbi5zY3JvbGxUb3BcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlKCkge1xuICAgICAgICB2YXIgbiA9IHMoKTtcbiAgICAgICAgdCB8fCAodCA9ICQoXCJpZnJhbWUuSWZyYW1lQWRIaWRlXCIpKSwgdC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHQgPSAkKHRoaXMpLm9mZnNldCgpLnRvcCAtIDczO1xuICAgICAgICAgICAgIXIuZ3V0dGVyQWRzRW5hYmxlZCAmJiBuID49IHQgPyAkKHRoaXMpLmNzcyhcInZpc2liaWxpdHlcIiwgXCJoaWRkZW5cIikgOiAkKHRoaXMpLmNzcyhcInZpc2liaWxpdHlcIiwgXCJ2aXNpYmxlXCIpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaSgpIHtcbiAgICAgICAgJChcIiNOYXZcIikuY3NzKFwiY3NzVGV4dFwiLCBcInBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDt3aWR0aDo5NzBweCAhaW1wb3J0YW50XCIpLCAkKFwiI1NtYWxsSGVhZGVyQ29udGFpbmVyXCIpLmNzcyhcImNzc1RleHRcIiwgXCJwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtoZWlnaHQ6IDM2cHggIWltcG9ydGFudDt3aWR0aDo5NzBweCAhaW1wb3J0YW50XCIpLCAkKFwiLmZvcmNlU3BhY2VcIikuY3NzKFwiY3NzVGV4dFwiLCBcIndpZHRoOiA5NzBweCAhaW1wb3J0YW50OyBoZWlnaHQ6OXB4ICFpbXBvcnRhbnQ7cGFkZGluZy10b3A6IDBweCAhaW1wb3J0YW50O2JhY2tncm91bmQ6d2hpdGVcIiksICQoXCIjQ29udGFpbmVyXCIpLmNzcyhcImNzc1RleHRcIiwgXCJ3aWR0aDogOTcwcHggIWltcG9ydGFudFwiKSwgJChcIi5teVN1Ym1lbnVGaXhlZFwiKS5jc3MoXCJjc3NUZXh0XCIsIFwicG9zaXRpb246IHJlbGF0aXZlOyB0b3A6IDBweDtcIiksICQoXCIjTWFzdGVyQ29udGFpbmVyXCIpLmNzcyhcImNzc1RleHRcIiwgXCJ3aWR0aDogOTcwcHggIWltcG9ydGFudFwiKSwgJChcIi5teVN1Ym1lbnVGaXhlZFwiKS5sZW5ndGggPT0gMSAmJiAoJChcIi5mb3JjZVNwYWNlVW5kZXJTdWJtZW51XCIpLmhpZGUoKSwgJChcIi5mb3JjZVNwYWNlXCIpLmNzcyhcImNzc1RleHRcIiwgXCJ3aWR0aDogOTEwcHggIWltcG9ydGFudDsgaGVpZ2h0OjdweCAhaW1wb3J0YW50O3BhZGRpbmctdG9wOiAwcHggIWltcG9ydGFudDtcIikpLCAkKHdpbmRvdykudW5iaW5kKFwic2Nyb2xsXCIpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaCgpIHtcbiAgICAgICAgJChcIiNOYXZcIikuY3NzKFwiY3NzVGV4dFwiLCBcInBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50O3dpZHRoOjEwMCUgIWltcG9ydGFudFwiKSwgJChcIiNTbWFsbEhlYWRlckNvbnRhaW5lclwiKS5jc3MoXCJjc3NUZXh0XCIsIFwicG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7aGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7d2lkdGg6MTAwJSAhaW1wb3J0YW50XCIpLCAkKFwiLmZvcmNlU3BhY2VcIikuY3NzKFwiY3NzVGV4dFwiLCBcIndpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IGhlaWdodDoxNXB4ICFpbXBvcnRhbnQ7cGFkZGluZy10b3A6IDYycHggIWltcG9ydGFudDtcIiksICQoXCIjQ29udGFpbmVyXCIpLmNzcyhcImNzc1RleHRcIiwgXCJ3aWR0aDogMTAwJSAhaW1wb3J0YW50XCIpLCAkKFwiLm15U3VibWVudUZpeGVkXCIpLmNzcyhcImNzc1RleHRcIiwgXCJwb3NpdGlvbjogZml4ZWQ7IHRvcDogNjhweDtcIiksICQoXCIjTWFzdGVyQ29udGFpbmVyXCIpLmNzcyhcImNzc1RleHRcIiwgXCJ3aWR0aDogMTAwJVwiKSwgJChcIi5teVN1Ym1lbnVGaXhlZFwiKS5sZW5ndGggPT0gMSAmJiAkKFwiLmZvcmNlU3BhY2VVbmRlclN1Ym1lbnVcIikuc2hvdygpLCAkKHdpbmRvdykuc2Nyb2xsKGUpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbygpIHtcbiAgICAgICAgdmFyIG4gPSAxMDI0O1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQuYm9keSAmJiBkb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoICYmIChuID0gZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCksIHdpbmRvdy5pbm5lcldpZHRoICYmIHdpbmRvdy5pbm5lckhlaWdodCAmJiAobiA9IHdpbmRvdy5pbm5lcldpZHRoKSwgblxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHUoKSB7XG4gICAgICAgIG8oKSA8IDk3OCA/IGkoKSA6IGgoKVxuICAgIH1cbiAgICB2YXIgbiA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgZiA9IC9tb2JpbGUvaS50ZXN0KG4pIHx8IC9pcGFkL2kudGVzdChuKSB8fCAvaXBob25lL2kudGVzdChuKSB8fCAvYW5kcm9pZC9pLnRlc3QobikgfHwgL3BsYXlib29rL2kudGVzdChuKSB8fCAvYmxhY2tiZXJyeS9pLnRlc3QobiksXG4gICAgICAgIHQsIHI7XG4gICAgcmV0dXJuICQoZnVuY3Rpb24oKSB7XG4gICAgICAgIGYgPyBpKCkgOiAkKHdpbmRvdykubG9hZCh1KS5yZXNpemUodSlcbiAgICB9KSwgdCA9IG51bGwsIHIgPSB7XG4gICAgICAgIGlzTW9iaWxlOiBmLFxuICAgICAgICBndXR0ZXJBZHNFbmFibGVkOiAhMSxcbiAgICAgICAgdW5maXhIZWFkZXI6IGlcbiAgICB9XG59KCk7XG5cbjsgLy8vIGpxdWVyeS5jb29raWUuanNcbmpRdWVyeS5jb29raWUgPSBmdW5jdGlvbihuLCB0LCBpKSB7XG4gICAgdmFyIG8sIHIsIGYsIGUsIHUsIHM7XG4gICAgaWYgKHR5cGVvZiB0ICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaSA9IGkgfHwge30sIHQgPT09IG51bGwgJiYgKHQgPSBcIlwiLCBpLmV4cGlyZXMgPSAtMSksIG8gPSBcIlwiLCBpLmV4cGlyZXMgJiYgKHR5cGVvZiBpLmV4cGlyZXMgPT0gXCJudW1iZXJcIiB8fCBpLmV4cGlyZXMudG9VVENTdHJpbmcpICYmICh0eXBlb2YgaS5leHBpcmVzID09IFwibnVtYmVyXCIgPyAociA9IG5ldyBEYXRlLCByLnNldFRpbWUoci5nZXRUaW1lKCkgKyBpLmV4cGlyZXMgKiA4NjRlNSkpIDogciA9IGkuZXhwaXJlcywgbyA9IFwiOyBleHBpcmVzPVwiICsgci50b1VUQ1N0cmluZygpKTtcbiAgICAgICAgdmFyIGggPSBpLnBhdGggPyBcIjsgcGF0aD1cIiArIGkucGF0aCA6IFwiXCIsXG4gICAgICAgICAgICBjID0gaS5kb21haW4gPyBcIjsgZG9tYWluPVwiICsgaS5kb21haW4gOiBcIlwiLFxuICAgICAgICAgICAgbCA9IGkuc2VjdXJlID8gXCI7IHNlY3VyZVwiIDogXCJcIjtcbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gW24sIFwiPVwiLCBlbmNvZGVVUklDb21wb25lbnQodCksIG8sIGgsIGMsIGxdLmpvaW4oXCJcIilcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZiA9IG51bGwsIGRvY3VtZW50LmNvb2tpZSAmJiBkb2N1bWVudC5jb29raWUgIT0gXCJcIilcbiAgICAgICAgICAgIGZvciAoZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIiksIHUgPSAwOyB1IDwgZS5sZW5ndGg7IHUrKylcbiAgICAgICAgICAgICAgICBpZiAocyA9IGpRdWVyeS50cmltKGVbdV0pLCBzLnN1YnN0cmluZygwLCBuLmxlbmd0aCArIDEpID09IG4gKyBcIj1cIikge1xuICAgICAgICAgICAgICAgICAgICBmID0gZGVjb2RlVVJJQ29tcG9uZW50KHMuc3Vic3RyaW5nKG4ubGVuZ3RoICsgMSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH0gcmV0dXJuIGZcbiAgICB9XG59O1xuXG47IC8vLyBqcXVlcnkuanNvbmNvb2tpZS5qc1xuZnVuY3Rpb24gUm9ibG94SlNPTkNvb2tpZShuKSB7XG4gICAgdGhpcy5fY29va2llbmFtZSA9IG5cbn0oZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gZnVuY3Rpb24obikge1xuICAgICAgICByZXR1cm4gdHlwZW9mIG4gPT0gXCJvYmplY3RcIiAmJiAhKG4gaW5zdGFuY2VvZiBBcnJheSkgJiYgbiAhPT0gbnVsbFxuICAgIH07XG4gICAgbi5leHRlbmQoe1xuICAgICAgICBnZXRKU09OQ29va2llOiBmdW5jdGlvbih0LCBpKSB7XG4gICAgICAgICAgICB2YXIgciA9IG4uY29va2llKHQpO1xuICAgICAgICAgICAgcmV0dXJuIGkgPyByIDogciA/IEpTT04ucGFyc2UocikgOiB7fVxuICAgICAgICB9LFxuICAgICAgICBzZXRKU09OQ29va2llOiBmdW5jdGlvbihpLCByLCB1KSB7XG4gICAgICAgICAgICB2YXIgZiA9IFwiXCI7XG4gICAgICAgICAgICByZXR1cm4gdSA9IG4uZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICBleHBpcmVzOiA5MCxcbiAgICAgICAgICAgICAgICBwYXRoOiBcIi9cIlxuICAgICAgICAgICAgfSwgdSksIGYgPSB0KHIpID8gSlNPTi5zdHJpbmdpZnkocikgOiByLCBuLmNvb2tpZShpLCBmLCB1KVxuICAgICAgICB9LFxuICAgICAgICByZW1vdmVKU09OQ29va2llOiBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICByZXR1cm4gbi5jb29raWUodCwgbnVsbClcbiAgICAgICAgfSxcbiAgICAgICAgSlNPTkNvb2tpZTogZnVuY3Rpb24odCwgaSwgcikge1xuICAgICAgICAgICAgcmV0dXJuIGkgJiYgbi5zZXRKU09OQ29va2llKHQsIGksIHIpLCBuLmdldEpTT05Db29raWUodClcbiAgICAgICAgfVxuICAgIH0pXG59KShqUXVlcnkpLCBSb2Jsb3hKU09OQ29va2llLnByb3RvdHlwZSA9IHtcbiAgICBEZWxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gJC5yZW1vdmVKU09OQ29va2llKHRoaXMuX2Nvb2tpZW5hbWUpXG4gICAgfSxcbiAgICBTZXRPYmo6IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICAgICAgcmV0dXJuIHQgfHwgKHQgPSB7XG4gICAgICAgICAgICBwYXRoOiBcIi9cIlxuICAgICAgICB9KSwgJC5KU09OQ29va2llKHRoaXMuX2Nvb2tpZW5hbWUsIG4sIHQpXG4gICAgfSxcbiAgICBTZXRKU09OOiBmdW5jdGlvbihuLCB0KSB7XG4gICAgICAgIHJldHVybiB0IHx8ICh0ID0ge1xuICAgICAgICAgICAgcGF0aDogXCIvXCJcbiAgICAgICAgfSksICQuSlNPTkNvb2tpZSh0aGlzLl9jb29raWVuYW1lLCBuLCB0KVxuICAgIH0sXG4gICAgR2V0T2JqOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG4gPSAkLmdldEpTT05Db29raWUodGhpcy5fY29va2llbmFtZSwgITEpO1xuICAgICAgICByZXR1cm4gbiA9PSBudWxsID8ge30gOiBuXG4gICAgfSxcbiAgICBHZXRKU09OOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICQuZ2V0SlNPTkNvb2tpZSh0aGlzLl9jb29raWVuYW1lLCAhMClcbiAgICB9XG59O1xuXG47IC8vLyBYc3JmVG9rZW4uanNcbnR5cGVvZiBSb2Jsb3ggPT0gXCJ1bmRlZmluZWRcIiAmJiAoUm9ibG94ID0ge30pLCBSb2Jsb3guWHNyZlRva2VuID0gZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZihuKSB7XG4gICAgICAgIHZhciB1LCB0O1xuICAgICAgICBpZiAoaS5hbGxVcmxzRW5hYmxlZCkgcmV0dXJuICEwO1xuICAgICAgICBmb3IgKHUgPSBuLnNwbGl0KFwiP1wiKVswXS50b0xvd2VyQ2FzZSgpLCB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspXG4gICAgICAgICAgICBpZiAoclt0XSA9PT0gdSkgcmV0dXJuICEwO1xuICAgICAgICByZXR1cm4gITFcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlKG4pIHtcbiAgICAgICAgci5wdXNoKG4udG9Mb3dlckNhc2UoKSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvKHQpIHtcbiAgICAgICAgbiA9IHRcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1KCkge1xuICAgICAgICByZXR1cm4gblxuICAgIH1cbiAgICB2YXIgbiA9IFwiXCIsXG4gICAgICAgIHQgPSAvKF58XFw/fCYpdG9rZW49W14mXSovLFxuICAgICAgICByID0gW1wiL2NoYXQvZnJpZW5kaGFuZGxlci5hc2h4XCIsIFwiL2NoYXQvcGFydHkuYXNoeFwiLCBcIi9jaGF0L3NlbmQuYXNoeFwiLCBcIi9jaGF0L3V0aWxpdHkuYXNoeFwiLCBcIi9ncm91cHMvcm9sZXNldHVwZGF0ZXIuYXNoeFwiLCBcImdyb3Vwcy5hc3B4L2V4aWxldXNlcmFuZGRlbGV0ZXBvc3RzXCIsIFwibWVzc2FnZXNoYW5kbGVyLmFzaHhcIiwgXCJlbWFpbHVwZ3JhZGVtZS5hc2h4XCIsIFwiL3NlcnZpY2VzL3VzZXJjaGVjay5hc214L3VwZGF0ZXBlcnNvbmFsaW5mb1wiLCBcIi90aHVtYnMvYXNzZXRtZWRpYS9wbGFjZW1lZGlhaXRlbXNvcnRoYW5kbGVyLmFzaHhcIl0sXG4gICAgICAgIGk7XG4gICAgcmV0dXJuICQuYWpheFByZWZpbHRlcihmdW5jdGlvbihpKSB7XG4gICAgICAgIHZhciBvLCBlO1xuICAgICAgICBpLmRhdGFUeXBlICE9IFwianNvbnBcIiAmJiBpLmRhdGFUeXBlICE9IFwic2NyaXB0XCIgJiYgbiAhPSBcIlwiICYmIGYoaS51cmwpICYmIChvID0gJC5wYXJhbSh7XG4gICAgICAgICAgICB0b2tlbjogblxuICAgICAgICB9KSwgdC50ZXN0KGkudXJsKSB8fCB0eXBlb2YgaS5kYXRhICE9IFwidW5kZWZpbmVkXCIgJiYgdC50ZXN0KGkuZGF0YSkgfHwgKGkudXJsICs9IC9cXD8vLnRlc3QoaS51cmwpID8gXCImdG9rZW49XCIgKyBlbmNvZGVVUklDb21wb25lbnQobikgOiBcIj90b2tlbj1cIiArIGVuY29kZVVSSUNvbXBvbmVudChuKSksIGUgPSBpLmVycm9yLCBpLmVycm9yID0gZnVuY3Rpb24ociwgdSwgZikge1xuICAgICAgICAgICAgaWYgKHIuc3RhdHVzID09IDQyMCkge1xuICAgICAgICAgICAgICAgIHZhciBvID0gci5nZXRSZXNwb25zZUhlYWRlcihcIlRva2VuXCIpO1xuICAgICAgICAgICAgICAgIGlmIChvID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGUgPT0gXCJmdW5jdGlvblwiICYmIGUociwgdSwgZik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk51bGwgdG9rZW4gcmV0dXJuZWQgYnkgWHNyZiBlbmFibGVkIGhhbmRsZXJcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHQudGVzdChpLnVybCkgPyBpLnVybCA9IGkudXJsLnJlcGxhY2UodCwgXCIkMXRva2VuPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG8pKSA6IGkuZGF0YSA9IGkuZGF0YS5yZXBsYWNlKHQsIFwiJDF0b2tlbj1cIiArIGVuY29kZVVSSUNvbXBvbmVudChvKSksICQuYWpheChpKSwgbiA9IG9cbiAgICAgICAgICAgIH0gZWxzZSB0eXBlb2YgZSA9PSBcImZ1bmN0aW9uXCIgJiYgZShyLCB1LCBmKVxuICAgICAgICB9KVxuICAgIH0pLCBpID0ge1xuICAgICAgICBzZXRUb2tlbjogbyxcbiAgICAgICAgZ2V0VG9rZW46IHUsXG4gICAgICAgIGFsbFVybHNFbmFibGVkOiAhMSxcbiAgICAgICAgYWRkRW5hYmxlZFVybDogZVxuICAgIH1cbn0oKTtcblxuOyAvLy8gUm9ibG94RXZlbnRNYW5hZ2VyLmpzXG5mdW5jdGlvbiBSQlhCYXNlRXZlbnRMaXN0ZW5lcigpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUkJYQmFzZUV2ZW50TGlzdGVuZXIpKSByZXR1cm4gbmV3IFJCWEJhc2VFdmVudExpc3RlbmVyO1xuICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmb3IgKGV2ZW50S2V5IGluIHRoaXMuZXZlbnRzKSAkKGRvY3VtZW50KS5iaW5kKHRoaXMuZXZlbnRzW2V2ZW50S2V5XSwgJC5wcm94eSh0aGlzLmxvY2FsQ29weSwgdGhpcykpXG4gICAgfSwgdGhpcy5ldmVudHMgPSBbXSwgdGhpcy5sb2NhbENvcHkgPSBmdW5jdGlvbihuLCB0KSB7XG4gICAgICAgIHZhciByID0gJC5leHRlbmQoITAsIHt9LCBuKSxcbiAgICAgICAgICAgIGkgPSAkLmV4dGVuZCghMCwge30sIHQpO1xuICAgICAgICB0aGlzLmhhbmRsZUV2ZW50KHIsIGkpXG4gICAgfSwgdGhpcy5kaXN0aWxsRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY29uc29sZS5sb2coXCJSQlhFdmVudExpc3RlbmVyIGRpc3RpbGxEYXRhIC0gUGxlYXNlIGltcGxlbWVudCBtZVwiKSwgITFcbiAgICB9LCB0aGlzLmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjb25zb2xlLmxvZyhcIkV2ZW50TGlzdGVuZXIgaGFuZGxlRXZlbnQgLSBQbGVhc2UgaW1wbGVtZW50IG1lXCIpLCAhMVxuICAgIH0sIHRoaXMuZmlyZUV2ZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjb25zb2xlLmxvZyhcIkV2ZW50TGlzdGVuZXIgZmlyZUV2ZW50IC0gUGxlYXNlIGltcGxlbWVudCBtZVwiKSwgITFcbiAgICB9XG59XG5Sb2Jsb3hFdmVudE1hbmFnZXIgPSBuZXcgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gdShuKSB7XG4gICAgICAgIHZhciBpID0gbmV3IFJlZ0V4cChuICsgXCI9KFteO10qKVwiKSxcbiAgICAgICAgICAgIHQgPSBpLmV4ZWMoZG9jdW1lbnQuY29va2llKTtcbiAgICAgICAgcmV0dXJuIHQgPyB0WzFdIDogbnVsbFxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHQobikge1xuICAgICAgICBmb3IgKHZhciB1ID0ge30sIHIgPSBuLnNwbGl0KFwiJlwiKSwgaSwgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSBpID0gclt0XS5zcGxpdChcIj1cIiksIHVbaVswXV0gPSBpWzFdO1xuICAgICAgICByZXR1cm4gdVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGkobikge1xuICAgICAgICB2YXIgaSA9IHUobik7XG4gICAgICAgIHJldHVybiBpID8gdChpKSA6IG51bGxcbiAgICB9XG4gICAgdmFyIG4gPSBbXSxcbiAgICAgICAgciA9IHt9O1xuICAgIHRoaXMuZW5hYmxlZCA9ICExLCB0aGlzLmluaXRpYWxpemVkID0gITEsIHRoaXMuZXZlbnRRdWV1ZSA9IFtdLCB0aGlzLmluaXRpYWxpemUgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIGZvciAodGhpcy5pbml0aWFsaXplZCA9ICEwLCB0aGlzLmVuYWJsZWQgPSBuOyB0aGlzLmV2ZW50UXVldWUubGVuZ3RoID4gMDspIHtcbiAgICAgICAgICAgIHZhciB0ID0gdGhpcy5ldmVudFF1ZXVlLnBvcCgpO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQodC5ldmVudE5hbWUsIHQuYXJncylcbiAgICAgICAgfVxuICAgIH0sIHRoaXMuZ2V0TWFya2V0aW5nR3VpZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbiA9IGkoXCJSQlhFdmVudFRyYWNrZXJcIik7XG4gICAgICAgIHJldHVybiBuICE9IG51bGwgPyBuLmJyb3dzZXJpZCA6IC0xXG4gICAgfSwgdGhpcy50cmlnZ2VyRXZlbnQgPSBmdW5jdGlvbihuLCB0KSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPyB0aGlzLmVuYWJsZWQgJiYgKHR5cGVvZiB0ID09IFwidW5kZWZpbmVkXCIgJiYgKHQgPSB7fSksIHQuZ3VpZCA9IHRoaXMuZ2V0TWFya2V0aW5nR3VpZCgpLCB0Lmd1aWQgIT0gLTEgJiYgJChkb2N1bWVudCkudHJpZ2dlcihuLCBbdF0pKSA6IHRoaXMuZXZlbnRRdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgIGV2ZW50TmFtZTogbixcbiAgICAgICAgICAgIGFyZ3M6IHRcbiAgICAgICAgfSlcbiAgICB9LCB0aGlzLnJlZ2lzdGVyQ29va2llU3RvcmVFdmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgbi5wdXNoKHQpXG4gICAgfSwgdGhpcy5pbnNlcnREYXRhU3RvcmVLZXlWYWx1ZVBhaXIgPSBmdW5jdGlvbihuLCB0KSB7XG4gICAgICAgIHJbbl0gPSB0XG4gICAgfSwgdGhpcy5tb25pdG9yQ29va2llU3RvcmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGksIHUsIGYsIHQsIHI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIFJvYmxveCA9PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBSb2Jsb3guQ2xpZW50ID09IFwidW5kZWZpbmVkXCIgfHwgd2luZG93LmxvY2F0aW9uLnByb3RvY29sID09IFwiaHR0cHM6XCIpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChpID0gUm9ibG94LkNsaWVudC5DcmVhdGVMYXVuY2hlcighMSksIGkgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgZm9yICh1ID0gMDsgdSA8IG4ubGVuZ3RoOyB1KyspIHRyeSB7XG4gICAgICAgICAgICAgICAgZiA9IG5bdV0sIHQgPSBpLkdldEtleVZhbHVlKGYpLCB0ICE9IFwiXCIgJiYgdCAhPSBcIi0xXCIgJiYgdCAhPSBcIlJCWF9OT1RfVkFMSURcIiAmJiAociA9IGV2YWwoXCIoXCIgKyB0ICsgXCIpXCIpLCByLnVzZXJUeXBlID0gci51c2VySWQgPiAwID8gXCJ1c2VyXCIgOiBcImd1ZXN0XCIsIFJvYmxveEV2ZW50TWFuYWdlci50cmlnZ2VyRXZlbnQoZiwgciksIGkuU2V0S2V5VmFsdWUoZiwgXCJSQlhfTk9UX1ZBTElEXCIpKVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgIFJvYmxveC5DbGllbnQuUmVsZWFzZUxhdW5jaGVyKGksICExLCAhMSlcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG59O1xuXG47IC8vLyBSb2Jsb3hFdmVudExpc3RlbmVyLmpzXG5Sb2Jsb3hMaXN0ZW5lciA9IG5ldyBSQlhCYXNlRXZlbnRMaXN0ZW5lciwgUm9ibG94TGlzdGVuZXIuaGFuZGxlRXZlbnQgPSBmdW5jdGlvbihuLCB0KSB7XG4gICAgdmFyIHIsIHUsIGk7XG4gICAgc3dpdGNoIChuLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcInJieF9ldnRfaW5zdGFsbF9iZWdpblwiOlxuICAgICAgICAgICAgaSA9IHtcbiAgICAgICAgICAgICAgICBndWlkOiBcImd1aWRcIixcbiAgICAgICAgICAgICAgICB1c2VySWQ6IFwidXNlcmlkXCJcbiAgICAgICAgICAgIH0sIHIgPSBuLnR5cGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJieF9ldnRfaW5pdGlhbF9pbnN0YWxsX3N0YXJ0XCI6XG4gICAgICAgICAgICBpID0ge1xuICAgICAgICAgICAgICAgIGd1aWQ6IFwiZ3VpZFwiLFxuICAgICAgICAgICAgICAgIHVzZXJJZDogXCJ1c2VyaWRcIlxuICAgICAgICAgICAgfSwgciA9IG4udHlwZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmJ4X2V2dF9mdHBcIjpcbiAgICAgICAgICAgIGkgPSB7XG4gICAgICAgICAgICAgICAgZ3VpZDogXCJndWlkXCIsXG4gICAgICAgICAgICAgICAgdXNlcklkOiBcInVzZXJpZFwiXG4gICAgICAgICAgICB9LCByID0gbi50eXBlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYnhfZXZ0X2luaXRpYWxfaW5zdGFsbF9zdWNjZXNzXCI6XG4gICAgICAgICAgICBpID0ge1xuICAgICAgICAgICAgICAgIGd1aWQ6IFwiZ3VpZFwiLFxuICAgICAgICAgICAgICAgIHVzZXJJZDogXCJ1c2VyaWRcIlxuICAgICAgICAgICAgfSwgciA9IG4udHlwZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmJ4X2V2dF9mbXBcIjpcbiAgICAgICAgICAgIGkgPSB7XG4gICAgICAgICAgICAgICAgZ3VpZDogXCJndWlkXCIsXG4gICAgICAgICAgICAgICAgdXNlcklkOiBcInVzZXJpZFwiXG4gICAgICAgICAgICB9LCByID0gbi50eXBlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gY29uc29sZS5sb2coXCJSb2Jsb3hFdmVudExpc3RlbmVyIC0gRXZlbnQgcmVnaXN0ZXJlZCB3aXRob3V0IGhhbmRsaW5nIGluc3RydWN0aW9uczogXCIgKyBuLnR5cGUpLCAhMVxuICAgIH1cbiAgICByZXR1cm4gdSA9IHRoaXMuZGlzdGlsbERhdGEodCwgaSksIHRoaXMuZmlyZUV2ZW50KHRoaXMuZXZlbnRUb1N0cmluZyhyLCB1KSksICEwXG59LCBSb2Jsb3hMaXN0ZW5lci5kaXN0aWxsRGF0YSA9IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICB2YXIgaSA9IHt9O1xuICAgIGZvciAoZGF0YUtleSBpbiB0KSB0eXBlb2YgbltkYXRhS2V5XSAhPSB0eXBlb2YgdW5kZWZpbmVkICYmIChpW3RbZGF0YUtleV1dID0gZW5jb2RlVVJJQ29tcG9uZW50KG5bZGF0YUtleV0pKTtcbiAgICByZXR1cm4gaVxufSwgUm9ibG94TGlzdGVuZXIuZXZlbnRUb1N0cmluZyA9IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICB2YXIgaSA9IFJvYmxveExpc3RlbmVyLnJlc3RVcmw7XG4gICAgaWYgKGkgKz0gXCI/ZXZlbnQ9XCIgKyBuICsgXCImXCIsIHQgIT0gbnVsbClcbiAgICAgICAgZm9yIChhcmcgaW4gdCkgdHlwZW9mIGFyZyAhPSB0eXBlb2YgdW5kZWZpbmVkICYmIHQuaGFzT3duUHJvcGVydHkoYXJnKSAmJiAoaSArPSBhcmcgKyBcIj1cIiArIHRbYXJnXSArIFwiJlwiKTtcbiAgICByZXR1cm4gaSA9IGkuc2xpY2UoMCwgaS5sZW5ndGggLSAxKVxufSwgUm9ibG94TGlzdGVuZXIuZmlyZUV2ZW50ID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gJCgnPGltZyB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIxXCIgc3JjPVwiJyArIG4gKyAnXCIvPicpXG59LCBSb2Jsb3hMaXN0ZW5lci5ldmVudHMgPSBbXCJyYnhfZXZ0X2luc3RhbGxfYmVnaW5cIiwgXCJyYnhfZXZ0X2luaXRpYWxfaW5zdGFsbF9zdGFydFwiLCBcInJieF9ldnRfZnRwXCIsIFwicmJ4X2V2dF9pbml0aWFsX2luc3RhbGxfc3VjY2Vzc1wiLCBcInJieF9ldnRfZm1wXCJdO1xuXG47IC8vLyBLb250YWdlbnRFdmVudExpc3RlbmVyLmpzXG5Lb250YWdlbnRMaXN0ZW5lciA9IG5ldyBSQlhCYXNlRXZlbnRMaXN0ZW5lciwgS29udGFnZW50TGlzdGVuZXIucmVzdFVybCA9IFwiXCIsIEtvbnRhZ2VudExpc3RlbmVyLkFQSUtleSA9IFwiXCIsIEtvbnRhZ2VudExpc3RlbmVyLlN0YWdpbmdBUElLZXkgPSBcIlwiLCBLb250YWdlbnRMaXN0ZW5lci5TdGFnaW5nRXZlbnRzID0gW10sIEtvbnRhZ2VudExpc3RlbmVyLmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24obiwgdCkge1xuICAgIGZ1bmN0aW9uIGYobikge1xuICAgICAgICByZXR1cm4gbiA9IG4udG9Mb3dlckNhc2UoKSwgbiA9PSBcIndpbjMyXCIgPyBuID0gXCJXaW5kb3dzXCIgOiBuID09IFwib3N4XCIgJiYgKG4gPSBcIk1hY1wiKSwgblxuICAgIH1cbiAgICB2YXIgciwgdSwgaSwgbywgZTtcbiAgICByID0gXCJldnRcIjtcbiAgICBzd2l0Y2ggKG4udHlwZSkge1xuICAgICAgICBjYXNlIFwicmJ4X2V2dF9wYWdldmlld1wiOlxuICAgICAgICAgICAgaSA9IHtcbiAgICAgICAgICAgICAgICBndWlkOiBcInNcIixcbiAgICAgICAgICAgICAgICBwYXRoOiBcInVcIixcbiAgICAgICAgICAgICAgICB0czogXCJ0c1wiLFxuICAgICAgICAgICAgICAgIHVzZXJfaXA6IFwiaXBcIlxuICAgICAgICAgICAgfSwgciA9IFwicGdyXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJieF9ldnRfdXNlcmluZm9cIjpcbiAgICAgICAgICAgIGkgPSB7XG4gICAgICAgICAgICAgICAgZ3VpZDogXCJzXCIsXG4gICAgICAgICAgICAgICAgYWdlOiBcImJcIixcbiAgICAgICAgICAgICAgICBnZW5kZXI6IFwiZ1wiXG4gICAgICAgICAgICB9LCByID0gXCJjcHVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmJ4X2V2dF9lY29tbV9pdGVtXCI6XG4gICAgICAgICAgICB0LnRvdGFsID0gTWF0aC5yb3VuZCh0LnRvdGFsICogMTAwKSwgdC5wcm9kdWN0TmFtZSA9IHQucHJvZHVjdE5hbWUucmVwbGFjZSgvXFxzL2csIFwiXCIpLnJlcGxhY2UoXCJPdXRyYWdlb3VzXCIsIFwiT1wiKS5yZXBsYWNlKFwiVHVyYm9cIiwgXCJUXCIpLnJlcGxhY2UoXCJCdWlsZGVyc1wiLCBcIkJcIikucmVwbGFjZShcIkNsdWJcIiwgXCJDXCIpLCBpID0ge1xuICAgICAgICAgICAgICAgIGd1aWQ6IFwic1wiLFxuICAgICAgICAgICAgICAgIHRvdGFsOiBcInZcIixcbiAgICAgICAgICAgICAgICBwcm92aWRlcjogXCJzdDFcIixcbiAgICAgICAgICAgICAgICBjYXRlZ29yeTogXCJzdDJcIixcbiAgICAgICAgICAgICAgICBwcm9kdWN0TmFtZTogXCJzdDNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInR1XCJcbiAgICAgICAgICAgIH0sIHIgPSBcIm10dVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYnhfZXZ0X2Z0cFwiOlxuICAgICAgICAgICAgdC50cmFja2luZyA9IFwiXCIsIHQuc2hvcnR0cmFja2luZyA9IFwiXCIsIGkgPSB7XG4gICAgICAgICAgICAgICAgZ3VpZDogXCJzXCIsXG4gICAgICAgICAgICAgICAgdHJhY2tpbmd0YWc6IFwidVwiLFxuICAgICAgICAgICAgICAgIHNob3J0dHJhY2tpbmc6IFwic3VcIlxuICAgICAgICAgICAgfSwgdSA9IHRoaXMuZGlzdGlsbERhdGEodCwgaSksIHIgPSBcImFwYVwiLCB0aGlzLmZpcmVFdmVudCh0aGlzLmV2ZW50VG9TdHJpbmcobi50eXBlLCByLCB1KSksIHQuZXZlbnROYW1lID0gXCJJbnN0YWxsIFN1Y2Nlc3MgRnVubmVsXCIsIHQuZXZlbnRUeXBlID0gXCJJbnN0YWxsIFN1Y2Nlc3MgRnVubmVsXCIsIHQub3MgPSBmKHQub3MpLCBpID0ge1xuICAgICAgICAgICAgICAgIGd1aWQ6IFwic1wiLFxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogXCJzdDFcIixcbiAgICAgICAgICAgICAgICBvczogXCJzdDJcIixcbiAgICAgICAgICAgICAgICB1c2VyVHlwZTogXCJzdDNcIixcbiAgICAgICAgICAgICAgICBldmVudE5hbWU6IFwiblwiXG4gICAgICAgICAgICB9LCB1ID0gdGhpcy5kaXN0aWxsRGF0YSh0LCBpKSwgciA9IFwiZXZ0XCIsIHRoaXMuZmlyZUV2ZW50KHRoaXMuZXZlbnRUb1N0cmluZyhuLnR5cGUsIHIsIHUpKSwgdC5ldmVudFR5cGUgPSBcIkluc3RhbGwgU3VjY2VzcyBQbGFjZVwiLCBpID0ge1xuICAgICAgICAgICAgICAgIGd1aWQ6IFwic1wiLFxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogXCJzdDFcIixcbiAgICAgICAgICAgICAgICBvczogXCJzdDJcIixcbiAgICAgICAgICAgICAgICB1c2VyVHlwZTogXCJzdDNcIixcbiAgICAgICAgICAgICAgICBwbGFjZUlkOiBcIm5cIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmJ4X2V2dF9pbml0aWFsX2luc3RhbGxfc3VjY2Vzc1wiOlxuICAgICAgICAgICAgdC50cmFja2luZyA9IFwiXCIsIHQuc2hvcnR0cmFja2luZyA9IFwiXCIsIGkgPSB7XG4gICAgICAgICAgICAgICAgZ3VpZDogXCJzXCIsXG4gICAgICAgICAgICAgICAgdHJhY2tpbmd0YWc6IFwidVwiLFxuICAgICAgICAgICAgICAgIHNob3J0dHJhY2tpbmc6IFwic3VcIlxuICAgICAgICAgICAgfSwgdSA9IHRoaXMuZGlzdGlsbERhdGEodCwgaSksIHIgPSBcImFwYVwiLCB0aGlzLmZpcmVFdmVudCh0aGlzLmV2ZW50VG9TdHJpbmcobi50eXBlLCByLCB1KSksIHQuZXZlbnROYW1lID0gXCJCb290c3RyYXBwZXIgSW5zdGFsbCBTdWNjZXNzIEZ1bm5lbFwiLCB0LmV2ZW50VHlwZSA9IFwiQm9vdHN0cmFwcGVyIEluc3RhbGwgU3VjY2VzcyBGdW5uZWxcIiwgdC5vcyA9IGYodC5vcyksIGkgPSB7XG4gICAgICAgICAgICAgICAgZ3VpZDogXCJzXCIsXG4gICAgICAgICAgICAgICAgZXZlbnRUeXBlOiBcInN0MVwiLFxuICAgICAgICAgICAgICAgIG9zOiBcInN0MlwiLFxuICAgICAgICAgICAgICAgIHVzZXJUeXBlOiBcInN0M1wiLFxuICAgICAgICAgICAgICAgIGV2ZW50TmFtZTogXCJuXCJcbiAgICAgICAgICAgIH0sIHUgPSB0aGlzLmRpc3RpbGxEYXRhKHQsIGkpLCByID0gXCJldnRcIiwgdGhpcy5maXJlRXZlbnQodGhpcy5ldmVudFRvU3RyaW5nKG4udHlwZSwgciwgdSkpLCB0LmV2ZW50VHlwZSA9IFwiQm9vdHN0cmFwcGVyIEluc3RhbGwgU3VjY2VzcyBQbGFjZVwiLCBpID0ge1xuICAgICAgICAgICAgICAgIGd1aWQ6IFwic1wiLFxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogXCJzdDFcIixcbiAgICAgICAgICAgICAgICBvczogXCJzdDJcIixcbiAgICAgICAgICAgICAgICB1c2VyVHlwZTogXCJzdDNcIixcbiAgICAgICAgICAgICAgICBwbGFjZUlkOiBcIm5cIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmJ4X2V2dF9pbnN0YWxsX2JlZ2luXCI6XG4gICAgICAgICAgICB0LmV2ZW50TmFtZSA9IFwiSW5zdGFsbCBCZWdpblwiLCB0LmV2ZW50VHlwZSA9IFwiSW5zdGFsbCBCZWdpblwiLCBpID0ge1xuICAgICAgICAgICAgICAgIGd1aWQ6IFwic1wiLFxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogXCJzdDFcIixcbiAgICAgICAgICAgICAgICBvczogXCJzdDJcIixcbiAgICAgICAgICAgICAgICBldmVudE5hbWU6IFwiblwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYnhfZXZ0X2luaXRpYWxfaW5zdGFsbF9zdGFydFwiOlxuICAgICAgICAgICAgdC5ldmVudE5hbWUgPSBcIkJvb3RzdHJhcHBlciBJbnN0YWxsIEJlZ2luXCIsIHQuZXZlbnRUeXBlID0gXCJCb290c3RyYXBwZXIgSW5zdGFsbCBCZWdpblwiLCBpID0ge1xuICAgICAgICAgICAgICAgIGd1aWQ6IFwic1wiLFxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogXCJzdDFcIixcbiAgICAgICAgICAgICAgICBvczogXCJzdDJcIixcbiAgICAgICAgICAgICAgICBldmVudE5hbWU6IFwiblwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYnhfZXZ0X2ZtcFwiOlxuICAgICAgICAgICAgdC5ldmVudE5hbWUgPSBcIkZpdmUgTWludXRlIFBsYXkgRnVubmVsXCIsIHQuZXZlbnRUeXBlID0gXCJGaXZlIE1pbnV0ZSBQbGF5IEZ1bm5lbFwiLCB0Lm9zID0gZih0Lm9zKSwgaSA9IHtcbiAgICAgICAgICAgICAgICBndWlkOiBcInNcIixcbiAgICAgICAgICAgICAgICBldmVudFR5cGU6IFwic3QxXCIsXG4gICAgICAgICAgICAgICAgb3M6IFwic3QyXCIsXG4gICAgICAgICAgICAgICAgdXNlclR5cGU6IFwic3QzXCIsXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lOiBcIm5cIlxuICAgICAgICAgICAgfSwgdSA9IHRoaXMuZGlzdGlsbERhdGEodCwgaSksIHRoaXMuZmlyZUV2ZW50KHRoaXMuZXZlbnRUb1N0cmluZyhuLnR5cGUsIHIsIHUpKSwgdC5ldmVudFR5cGUgPSBcIkZpdmUgTWludXRlIFBsYXkgUGxhY2VcIiwgaSA9IHtcbiAgICAgICAgICAgICAgICBndWlkOiBcInNcIixcbiAgICAgICAgICAgICAgICBldmVudFR5cGU6IFwic3QxXCIsXG4gICAgICAgICAgICAgICAgb3M6IFwic3QyXCIsXG4gICAgICAgICAgICAgICAgdXNlclR5cGU6IFwic3QzXCIsXG4gICAgICAgICAgICAgICAgcGxhY2VJZDogXCJuXCJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJieF9ldnRfcGxheV91c2VyXCI6XG4gICAgICAgICAgICB0LmV2ZW50TmFtZSA9IFwiUGxheSBVc2VyXCIsIHQuZXZlbnRUeXBlID0gXCJQbGF5IFVzZXJcIiwgdC5nZW5kZXIgPSB0LmdlbmRlciwgaSA9IHtcbiAgICAgICAgICAgICAgICBndWlkOiBcInNcIixcbiAgICAgICAgICAgICAgICBldmVudFR5cGU6IFwic3QxXCIsXG4gICAgICAgICAgICAgICAgZ2VuZGVyOiBcInN0MlwiLFxuICAgICAgICAgICAgICAgIGFnZTogXCJzdDNcIixcbiAgICAgICAgICAgICAgICBwbGFjZUlkOiBcImxcIixcbiAgICAgICAgICAgICAgICBldmVudE5hbWU6IFwiblwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYnhfZXZ0X3BsYXlfZ3Vlc3RcIjpcbiAgICAgICAgICAgIHQuZXZlbnROYW1lID0gXCJQbGF5IEd1ZXN0XCIsIHQuZXZlbnRUeXBlID0gXCJQbGF5IEd1ZXN0XCIsIHQuZ2VuZGVyID0gdC5nZW5kZXIsIGkgPSB7XG4gICAgICAgICAgICAgICAgZ3VpZDogXCJzXCIsXG4gICAgICAgICAgICAgICAgZXZlbnRUeXBlOiBcInN0MVwiLFxuICAgICAgICAgICAgICAgIGdlbmRlcjogXCJzdDJcIixcbiAgICAgICAgICAgICAgICBwbGFjZUlkOiBcImxcIixcbiAgICAgICAgICAgICAgICBldmVudE5hbWU6IFwiblwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYnhfZXZ0X3NpZ251cFwiOlxuICAgICAgICAgICAgdC5ldmVudE5hbWUgPSBcIlNpZ24gVXAgRnVubmVsXCIsIHQuZXZlbnRUeXBlID0gXCJTaWduIFVwIEZ1bm5lbFwiLCBpID0ge1xuICAgICAgICAgICAgICAgIGd1aWQ6IFwic1wiLFxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogXCJzdDFcIixcbiAgICAgICAgICAgICAgICBldmVudE5hbWU6IFwiblwiXG4gICAgICAgICAgICB9LCB1ID0gdGhpcy5kaXN0aWxsRGF0YSh0LCBpKSwgciA9IFwiZXZ0XCIsIHRoaXMuZmlyZUV2ZW50KHRoaXMuZXZlbnRUb1N0cmluZyhuLnR5cGUsIHIsIHUpKSwgdC5ldmVudE5hbWUgPSBcIlNpZ24gVXBcIiwgdC5ldmVudFR5cGUgPSBcIlNpZ24gVXBcIiwgdC5nZW5kZXIgPSB0LmdlbmRlciwgaSA9IHtcbiAgICAgICAgICAgICAgICBndWlkOiBcInNcIixcbiAgICAgICAgICAgICAgICBldmVudFR5cGU6IFwic3QxXCIsXG4gICAgICAgICAgICAgICAgZ2VuZGVyOiBcInN0MlwiLFxuICAgICAgICAgICAgICAgIGFnZTogXCJzdDNcIixcbiAgICAgICAgICAgICAgICBldmVudE5hbWU6IFwiblwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYnhfZXZ0X2Vjb21tX2N1c3RvbVwiOlxuICAgICAgICAgICAgdC5ldmVudFR5cGUgPSBcIlB1cmNoYXNlXCIsIHQucHJvZHVjdE5hbWUgPSB0LnByb2R1Y3ROYW1lLnJlcGxhY2UoL1xccy9nLCBcIlwiKS5yZXBsYWNlKFwiT3V0cmFnZW91c1wiLCBcIk9cIikucmVwbGFjZShcIlR1cmJvXCIsIFwiVFwiKS5yZXBsYWNlKFwiQnVpbGRlcnNcIiwgXCJCXCIpLnJlcGxhY2UoXCJDbHViXCIsIFwiQ1wiKSwgaSA9IHtcbiAgICAgICAgICAgICAgICBndWlkOiBcInNcIixcbiAgICAgICAgICAgICAgICBldmVudFR5cGU6IFwic3QxXCIsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXI6IFwic3QyXCIsXG4gICAgICAgICAgICAgICAgY2F0ZWdvcnk6IFwic3QzXCIsXG4gICAgICAgICAgICAgICAgcHJvZHVjdE5hbWU6IFwiblwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYnhfZXZ0X2FidGVzdFwiOlxuICAgICAgICAgICAgaSA9IHtcbiAgICAgICAgICAgICAgICBndWlkOiBcInNcIixcbiAgICAgICAgICAgICAgICBleHBlcmltZW50OiBcInN0MVwiLFxuICAgICAgICAgICAgICAgIHZhcmlhdGlvbjogXCJuXCJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJieF9ldnRfcGFnZXZpZXdfY3VzdG9tXCI6XG4gICAgICAgICAgICB0LmV2ZW50TmFtZSA9IHQucGFnZSwgaSA9IHR5cGVvZiB0LnVzZXJUeXBlID09IFwidW5kZWZpbmVkXCIgPyB7XG4gICAgICAgICAgICAgICAgZ3VpZDogXCJzXCIsXG4gICAgICAgICAgICAgICAgcGFnZTogXCJzdDFcIixcbiAgICAgICAgICAgICAgICBldmVudE5hbWU6IFwiblwiXG4gICAgICAgICAgICB9IDoge1xuICAgICAgICAgICAgICAgIGd1aWQ6IFwic1wiLFxuICAgICAgICAgICAgICAgIHBhZ2U6IFwic3QxXCIsXG4gICAgICAgICAgICAgICAgdXNlclR5cGU6IFwic3QyXCIsXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lOiBcIm5cIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmJ4X2V2dF9nZW5lcmljXCI6XG4gICAgICAgICAgICB0LmV2ZW50TmFtZSA9IHQudHlwZSwgaSA9IHtcbiAgICAgICAgICAgICAgICBndWlkOiBcInNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0MVwiLFxuICAgICAgICAgICAgICAgIGV2ZW50TmFtZTogXCJuXCJcbiAgICAgICAgICAgIH0sIHR5cGVvZiB0Lm9wdDEgIT0gXCJ1bmRlZmluZWRcIiAmJiAoaS5vcHQxID0gXCJzdDJcIiksIHR5cGVvZiB0Lm9wdDIgIT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgdC5vcHQxICE9IFwidW5kZWZpbmVkXCIgJiYgKGkub3B0MiA9IFwic3QzXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYnhfZXZ0X3NvdXJjZV90cmFja2luZ1wiOlxuICAgICAgICAgICAgdC5pbnN0YWxsZWQgPSAwLCB0LnNvdXJjZVR5cGUgPSBcImFkXCIsIGkgPSB7XG4gICAgICAgICAgICAgICAgZ3VpZDogXCJzXCIsXG4gICAgICAgICAgICAgICAgc291cmNlVHlwZTogXCJ0dVwiLFxuICAgICAgICAgICAgICAgIGluc3RhbGxlZDogXCJpXCIsXG4gICAgICAgICAgICAgICAgc291cmNlOiBcInN0MVwiLFxuICAgICAgICAgICAgICAgIGNhbXBhaWduOiBcInN0MlwiLFxuICAgICAgICAgICAgICAgIG1lZGl1bTogXCJzdDNcIlxuICAgICAgICAgICAgfSwgciA9IFwidWNjXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJieF9ldnRfY2FyZF9yZWRlbXB0aW9uXCI6XG4gICAgICAgICAgICB0LmV2ZW50VHlwZSA9IFwiQ2FyZFJlZGVtcHRpb25cIiwgdC5ldmVudE5hbWUgPSBcIkNhcmRSZWRlbXB0aW9uXCIsIGkgPSB7XG4gICAgICAgICAgICAgICAgZ3VpZDogXCJzXCIsXG4gICAgICAgICAgICAgICAgZXZlbnRUeXBlOiBcInN0MVwiLFxuICAgICAgICAgICAgICAgIG1lcmNoYW50OiBcInN0MlwiLFxuICAgICAgICAgICAgICAgIGNhcmRWYWx1ZTogXCJzdDNcIixcbiAgICAgICAgICAgICAgICBldmVudE5hbWU6IFwiblwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYnhfZXZ0X3BvcHVwX2FjdGlvblwiOlxuICAgICAgICAgICAgdC5ldmVudFR5cGUgPSBcIkd1ZXN0UGxheVBvcHVwQWN0aW9uXCIsIHQuZXZlbnROYW1lID0gXCJHdWVzdFBsYXlQb3B1cEFjdGlvblwiLCBpID0ge1xuICAgICAgICAgICAgICAgIGd1aWQ6IFwic1wiLFxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogXCJzdDFcIixcbiAgICAgICAgICAgICAgICBhY3Rpb246IFwic3QyXCIsXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lOiBcIm5cIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKFwiS29udGFnZW50TGlzdGVuZXIgLSBFdmVudCByZWdpc3RlcmVkIHdpdGhvdXQgaGFuZGxpbmcgaW5zdHJ1Y3Rpb25zOiBcIiArIG4udHlwZSksICExXG4gICAgfVxuICAgIHJldHVybiB1ID0gdGhpcy5kaXN0aWxsRGF0YSh0LCBpKSwgdGhpcy5maXJlRXZlbnQodGhpcy5ldmVudFRvU3RyaW5nKG4udHlwZSwgciwgdSkpLCAhMFxufSwgS29udGFnZW50TGlzdGVuZXIuZGlzdGlsbERhdGEgPSBmdW5jdGlvbihuLCB0KSB7XG4gICAgdmFyIGkgPSB7fTtcbiAgICBmb3IgKGRhdGFLZXkgaW4gdCkgdHlwZW9mIG5bZGF0YUtleV0gIT0gdHlwZW9mIHVuZGVmaW5lZCAmJiAoaVt0W2RhdGFLZXldXSA9IGVuY29kZVVSSUNvbXBvbmVudChuW2RhdGFLZXldKSk7XG4gICAgcmV0dXJuIGlcbn0sIEtvbnRhZ2VudExpc3RlbmVyLmV2ZW50VG9TdHJpbmcgPSBmdW5jdGlvbihuLCB0LCBpKSB7XG4gICAgdmFyIHIgPSBLb250YWdlbnRMaXN0ZW5lci5yZXN0VXJsLFxuICAgICAgICB1ID0gdGhpcy5pc1N0YWdpbmdFdmVudChuLCBpKSA/IEtvbnRhZ2VudExpc3RlbmVyLlN0YWdpbmdBUElLZXkgOiBLb250YWdlbnRMaXN0ZW5lci5BUElLZXk7XG4gICAgaWYgKHIgKz0gdSArIFwiL1wiICsgdCArIFwiLz9cIiwgaSAhPSBudWxsKVxuICAgICAgICBmb3IgKGFyZyBpbiBpKSB0eXBlb2YgYXJnICE9IHR5cGVvZiB1bmRlZmluZWQgJiYgaS5oYXNPd25Qcm9wZXJ0eShhcmcpICYmIChyICs9IGFyZyArIFwiPVwiICsgaVthcmddICsgXCImXCIpO1xuICAgIHJldHVybiByID0gci5zbGljZSgwLCByLmxlbmd0aCAtIDEpXG59LCBLb250YWdlbnRMaXN0ZW5lci5pc1N0YWdpbmdFdmVudCA9IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICB2YXIgciwgaTtcbiAgICBzdGFnaW5nID0gITE7XG4gICAgdHJ5IHtcbiAgICAgICAgZm9yIChyIGluIHRoaXMuU3RhZ2luZ0V2ZW50cylcbiAgICAgICAgICAgIGlmIChpID0gdGhpcy5TdGFnaW5nRXZlbnRzW3JdLCB0eXBlb2YgaSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG4gPT0gaSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFnaW5nID0gITA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaSA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBpW25dICE9IFwidW5kZWZpbmVkXCIgJiYgaVtuXSA9PSB0LnN0MSkge1xuICAgICAgICAgICAgc3RhZ2luZyA9ICEwO1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKHUpIHt9XG4gICAgcmV0dXJuIHN0YWdpbmdcbn0sIEtvbnRhZ2VudExpc3RlbmVyLmZpcmVFdmVudCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9ICQoJzxpbWcgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMVwiIHNyYz1cIicgKyBuICsgJ1wiLz4nKVxufSwgS29udGFnZW50TGlzdGVuZXIuZXZlbnRzID0gW1wicmJ4X2V2dF9wYWdldmlld1wiLCBcInJieF9ldnRfaW5zdGFsbF9iZWdpblwiLCBcInJieF9ldnRfaW5pdGlhbF9pbnN0YWxsX3N0YXJ0XCIsIFwicmJ4X2V2dF9mdHBcIiwgXCJyYnhfZXZ0X2luaXRpYWxfaW5zdGFsbF9zdWNjZXNzXCIsIFwicmJ4X2V2dF9mbXBcIiwgXCJyYnhfZXZ0X3BsYXlfdXNlclwiLCBcInJieF9ldnRfcGxheV9ndWVzdFwiLCBcInJieF9ldnRfc2lnbnVwXCIsIFwicmJ4X2V2dF9lY29tbV9pdGVtXCIsIFwicmJ4X2V2dF9lY29tbV9jdXN0b21cIiwgXCJyYnhfZXZ0X3VzZXJpbmZvXCIsIFwicmJ4X2V2dF9hYnRlc3RcIiwgXCJyYnhfZXZ0X3BhZ2V2aWV3X2N1c3RvbVwiLCBcInJieF9ldnRfZ2VuZXJpY1wiLCBcInJieF9ldnRfc291cmNlX3RyYWNraW5nXCIsIFwicmJ4X2V2dF9jYXJkX3JlZGVtcHRpb25cIiwgXCJyYnhfZXZ0X3BvcHVwX2FjdGlvblwiXTtcblxuOyAvLy8gR29vZ2xlRXZlbnRMaXN0ZW5lci5qc1xuR29vZ2xlTGlzdGVuZXIgPSBuZXcgUkJYQmFzZUV2ZW50TGlzdGVuZXIsIEdvb2dsZUxpc3RlbmVyLmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24obiwgdCkge1xuICAgIGZ1bmN0aW9uIHIobikge1xuICAgICAgICByZXR1cm4gbiA9IG4udG9Mb3dlckNhc2UoKSwgbiA9PSBcIndpbjMyXCIgPyBuID0gXCJXaW5kb3dzXCIgOiBuID09IFwib3N4XCIgJiYgKG4gPSBcIk1hY1wiKSwgblxuICAgIH1cbiAgICB2YXIgZiwgdSwgaTtcbiAgICBzd2l0Y2ggKG4udHlwZSkge1xuICAgICAgICBjYXNlIFwicmJ4X2V2dF9pbml0aWFsX2luc3RhbGxfYmVnaW5cIjpcbiAgICAgICAgICAgIHQub3MgPSByKHQub3MpLCB0LmNhdGVnb3J5ID0gXCJCb290c3RyYXBwZXIgSW5zdGFsbCBCZWdpblwiLCBpID0ge1xuICAgICAgICAgICAgICAgIG9zOiBcImFjdGlvblwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYnhfZXZ0X2Z0cFwiOlxuICAgICAgICAgICAgdC5vcyA9IHIodC5vcyksIHQuY2F0ZWdvcnkgPSBcIkluc3RhbGwgU3VjY2Vzc1wiLCBpID0ge1xuICAgICAgICAgICAgICAgIG9zOiBcImFjdGlvblwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYnhfZXZ0X2luaXRpYWxfaW5zdGFsbF9zdWNjZXNzXCI6XG4gICAgICAgICAgICB0Lm9zID0gcih0Lm9zKSwgdC5jYXRlZ29yeSA9IFwiQm9vdHN0cmFwcGVyIEluc3RhbGwgU3VjY2Vzc1wiLCBpID0ge1xuICAgICAgICAgICAgICAgIG9zOiBcImFjdGlvblwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYnhfZXZ0X2ZtcFwiOlxuICAgICAgICAgICAgdC5vcyA9IHIodC5vcyksIHQuY2F0ZWdvcnkgPSBcIkZpdmUgTWludXRlIFBsYXlcIiwgaSA9IHtcbiAgICAgICAgICAgICAgICBvczogXCJhY3Rpb25cIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmJ4X2V2dF9hYnRlc3RcIjpcbiAgICAgICAgICAgIGkgPSB7XG4gICAgICAgICAgICAgICAgZXhwZXJpbWVudDogXCJjYXRlZ29yeVwiLFxuICAgICAgICAgICAgICAgIHZhcmlhdGlvbjogXCJhY3Rpb25cIixcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBcIm9wdF9sYWJlbFwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYnhfZXZ0X2NhcmRfcmVkZW1wdGlvblwiOlxuICAgICAgICAgICAgdC5jYXRlZ29yeSA9IFwiQ2FyZFJlZGVtcHRpb25cIiwgaSA9IHtcbiAgICAgICAgICAgICAgICBtZXJjaGFudDogXCJhY3Rpb25cIixcbiAgICAgICAgICAgICAgICBjYXJkVmFsdWU6IFwib3B0X2xhYmVsXCJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBjb25zb2xlLmxvZyhcIkdvb2dsZUxpc3RlbmVyIC0gRXZlbnQgcmVnaXN0ZXJlZCB3aXRob3V0IGhhbmRsaW5nIGluc3RydWN0aW9uczogXCIgKyBuLnR5cGUpLCAhMVxuICAgIH1cbiAgICByZXR1cm4gaS5jYXRlZ29yeSA9IFwiY2F0ZWdvcnlcIiwgdSA9IHRoaXMuZGlzdGlsbERhdGEodCwgaSksIHRoaXMuZmlyZUV2ZW50KHUpLCAhMFxufSwgR29vZ2xlTGlzdGVuZXIuZGlzdGlsbERhdGEgPSBmdW5jdGlvbihuLCB0KSB7XG4gICAgdmFyIGkgPSB7fSxcbiAgICAgICAgcjtcbiAgICBmb3IgKGRhdGFLZXkgaW4gdCkgdHlwZW9mIG5bZGF0YUtleV0gIT0gdHlwZW9mIHVuZGVmaW5lZCAmJiAoaVt0W2RhdGFLZXldXSA9IG5bZGF0YUtleV0pO1xuICAgIHJldHVybiByID0gW2kuY2F0ZWdvcnksIGkuYWN0aW9uXSwgaS5vcHRfbGFiZWwgIT0gbnVsbCAmJiAociA9IHIuY29uY2F0KGkub3B0X2xhYmVsKSksIGkub3B0X3ZhbHVlICE9IG51bGwgJiYgKHIgPSByLmNvbmNhdChpLm9wdF92YWx1ZSkpLCByXG59LCBHb29nbGVMaXN0ZW5lci5maXJlRXZlbnQgPSBmdW5jdGlvbihuKSB7XG4gICAgaWYgKHR5cGVvZiBfZ2FxICE9IHR5cGVvZiB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIGkgPSBbXCJfdHJhY2tFdmVudFwiXSxcbiAgICAgICAgICAgIHQgPSBbXCJiLl90cmFja0V2ZW50XCJdO1xuICAgICAgICBfZ2FxLnB1c2goaS5jb25jYXQobikpLCBfZ2FxLnB1c2godC5jb25jYXQobikpXG4gICAgfVxufSwgR29vZ2xlTGlzdGVuZXIuZXZlbnRzID0gW1wicmJ4X2V2dF9pbml0aWFsX2luc3RhbGxfYmVnaW5cIiwgXCJyYnhfZXZ0X2Z0cFwiLCBcInJieF9ldnRfaW5pdGlhbF9pbnN0YWxsX3N1Y2Nlc3NcIiwgXCJyYnhfZXZ0X2ZtcFwiLCBcInJieF9ldnRfYWJ0ZXN0XCIsIFwicmJ4X2V2dF9jYXJkX3JlZGVtcHRpb25cIl07XG5cbjsgLy8vIE1vbmdvRXZlbnRMaXN0ZW5lci5qc1xuTW9uZ29MaXN0ZW5lciA9IG5ldyBSQlhCYXNlRXZlbnRMaXN0ZW5lciwgTW9uZ29MaXN0ZW5lci5oYW5kbGVFdmVudCA9IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICB2YXIgaTtcbiAgICByZXR1cm4gaSA9IHR5cGVvZiB0LnNoYXJkID09IFwidW5kZWZpbmVkXCIgPyB0aGlzLmRlZmF1bHRTaGFyZCA6IHQuc2hhcmQsIHR5cGVvZiB0LmV2ZW50TmFtZSA9PSBcInVuZGVmaW5lZFwiICYmICh0LmV2ZW50TmFtZSA9IG4udHlwZSksIHQuZXZlbnROYW1lID09PSBcIkphdmFzY3JpcHRFeGNlcHRpb25Mb2dnaW5nRXZlbnRcIiA/IGRhdGFNYXAgPSB7XG4gICAgICAgIGNhdGVnb3J5OiBcImNhdGVnb3J5XCIsXG4gICAgICAgIHVybDogXCJ1cmxcIixcbiAgICAgICAgbXNnOiBcIm1zZ1wiLFxuICAgICAgICBsaW5lOiBcImxpbmVcIixcbiAgICAgICAgdWE6IFwiVUFcIlxuICAgIH0gOiAodHlwZW9mIHQuY2F0ZWdvcnkgPT0gXCJ1bmRlZmluZWRcIiAmJiAodC5jYXRlZ29yeSA9IE1vbmdvTGlzdGVuZXIuZ2V0Q2F0ZWdvcnlGcm9tRXZlbnROYW1lKHQuZXZlbnROYW1lKSksIHQudXNlcklkID0gTW9uZ29MaXN0ZW5lci51c2VySWQsIHQuaXAgPSBNb25nb0xpc3RlbmVyLmNsaWVudElwQWRkcmVzcywgZGF0YU1hcCA9IHtcbiAgICAgICAgZ3VpZDogXCJndWlkXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcImNhdGVnb3J5XCIsXG4gICAgICAgIHVzZXJJZDogXCJ1c2VyaWRcIixcbiAgICAgICAgaXA6IFwiaXBcIlxuICAgIH0pLCB0aGlzLmZpcmVFdmVudChpLCB0aGlzLmRpc3RpbGxEYXRhKHQsIGRhdGFNYXApKSwgITBcbn0sIE1vbmdvTGlzdGVuZXIuZ2V0Q2F0ZWdvcnlGcm9tRXZlbnROYW1lID0gZnVuY3Rpb24obikge1xuICAgIHN3aXRjaCAobikge1xuICAgICAgICBjYXNlIFwicmJ4X2V2dF9zaXRldG91Y2hcIjpcbiAgICAgICAgICAgIHJldHVybiBcIlNpdGVUb3VjaFwiO1xuICAgICAgICBjYXNlIFwicmJ4X2V2dF9mbXBcIjpcbiAgICAgICAgICAgIHJldHVybiBcIkZpdmVNaW51dGVQbGF5XCI7XG4gICAgICAgIGNhc2UgXCJyYnhfZXZ0X3BsYXlfdXNlclwiOlxuICAgICAgICBjYXNlIFwicmJ4X2V2dF9wbGF5X2d1ZXN0XCI6XG4gICAgICAgICAgICByZXR1cm4gXCJQbGF5XCI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gblxuICAgIH1cbn0sIE1vbmdvTGlzdGVuZXIuZGlzdGlsbERhdGEgPSBmdW5jdGlvbihuLCB0KSB7XG4gICAgdmFyIGkgPSB7fTtcbiAgICBmb3IgKGRhdGFLZXkgaW4gdCkgdHlwZW9mIG5bZGF0YUtleV0gIT0gdHlwZW9mIHVuZGVmaW5lZCAmJiAoaVt0W2RhdGFLZXldXSA9IGVuY29kZVVSSUNvbXBvbmVudChuW2RhdGFLZXldKSk7XG4gICAgcmV0dXJuIGlcbn0sIE1vbmdvTGlzdGVuZXIuZmlyZUV2ZW50ID0gZnVuY3Rpb24obiwgdCkge1xuICAgICQuYWpheCh7XG4gICAgICAgIHVybDogTW9uZ29MaXN0ZW5lci5sb2dnaW5nVVJJICsgbixcbiAgICAgICAgZGF0YVR5cGU6IFwianNvbnBcIixcbiAgICAgICAganNvbnBDYWxsYmFjazogXCJNb25nb0xpc3RlbmVyLmNhbGxiYWNrXCIsXG4gICAgICAgIGRhdGE6IHRcbiAgICB9KVxufSwgTW9uZ29MaXN0ZW5lci5jYWxsYmFjayA9IGZ1bmN0aW9uKCkge30sIE1vbmdvTGlzdGVuZXIuZXZlbnRzID0gW1wiSmF2YXNjcmlwdEV4Y2VwdGlvbkxvZ2dpbmdFdmVudFwiXTtcblxuOyAvLy8gU2VhcmNoVmlzaW9uTGlzdGVuZXIuanNcblNlYXJjaFZpc2lvbkxpc3RlbmVyID0gbmV3IFJCWEJhc2VFdmVudExpc3RlbmVyLCBTZWFyY2hWaXNpb25MaXN0ZW5lci5oYW5kbGVFdmVudCA9IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICB2YXIgaSA9IG51bGw7XG4gICAgc3dpdGNoIChuLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcInJieF9ldnRfZm1wXCI6XG4gICAgICAgICAgICBpID0ge1xuICAgICAgICAgICAgICAgIGVzdnRrX3Y6IFwiMVwiLFxuICAgICAgICAgICAgICAgIGVzdnRrX2VzdmlkOiBcIkE0MDEyNVwiLFxuICAgICAgICAgICAgICAgIGV2ZW50OiBcImZpdmVfbWludXRlX3BsYXlcIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmJ4X2V2dF9mdHBcIjpcbiAgICAgICAgICAgIGkgPSB7XG4gICAgICAgICAgICAgICAgZXN2dGtfdjogXCIxXCIsXG4gICAgICAgICAgICAgICAgZXN2dGtfZXN2aWQ6IFwiQTQwMTI1XCIsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IFwiZmlyc3RfcGxheVwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYnhfZXZ0X2luc3RhbGxfYmVnaW5cIjpcbiAgICAgICAgICAgIGkgPSB7XG4gICAgICAgICAgICAgICAgZXN2dGtfdjogXCIxXCIsXG4gICAgICAgICAgICAgICAgZXN2dGtfZXN2aWQ6IFwiQTQwMTI1XCIsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IFwiZG93bmxvYWRcIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmJ4X2V2dF9zaWdudXBcIjpcbiAgICAgICAgICAgIGkgPSB7XG4gICAgICAgICAgICAgICAgZXN2dGtfdjogXCIxXCIsXG4gICAgICAgICAgICAgICAgZXN2dGtfZXN2aWQ6IFwiQTQwMTI1XCIsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IFwiZXN2X3NpZ251cFwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYnhfZXZ0X2dlbmVyaWNcIjpcbiAgICAgICAgICAgIHQudHlwZSA9PT0gXCJPbmVEYXlSZXR1cm5cIiAmJiAoaSA9IHtcbiAgICAgICAgICAgICAgICBlc3Z0a192OiBcIjFcIixcbiAgICAgICAgICAgICAgICBlc3Z0a19lc3ZpZDogXCJBNDAxMjVcIixcbiAgICAgICAgICAgICAgICBldmVudDogXCJyZXR1cm5cIlxuICAgICAgICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGkgIT09IG51bGwgJiYgKGkub3JkZXJpZCA9IHQuZ3VpZCwgdGhpcy5maXJlRXZlbnQoaSkpLCAhMFxufSwgU2VhcmNoVmlzaW9uTGlzdGVuZXIuZmlyZUV2ZW50ID0gZnVuY3Rpb24obikge1xuICAgIHR5cGVvZiBlc3Z0a190cmFjayAhPSBcInVuZGVmaW5lZFwiID8gZXN2dGtfdHJhY2sobikgOiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICBTZWFyY2hWaXNpb25MaXN0ZW5lci5maXJlRXZlbnQobilcbiAgICB9LCA1MDApXG59LCBTZWFyY2hWaXNpb25MaXN0ZW5lci5ldmVudHMgPSBbXCJyYnhfZXZ0X2ZtcFwiLCBcInJieF9ldnRfZnRwXCIsIFwicmJ4X2V2dF9pbnN0YWxsX2JlZ2luXCIsIFwicmJ4X2V2dF9zaWdudXBcIiwgXCJyYnhfZXZ0X2dlbmVyaWNcIl07XG5cbjsgLy8vIFNpdGVUb3VjaEV2ZW50LmpzXG50eXBlb2YgUm9ibG94ID09IFwidW5kZWZpbmVkXCIgJiYgKFJvYmxveCA9IHt9KSwgUm9ibG94LlNpdGVUb3VjaEV2ZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gcigpIHtcbiAgICAgICAgdmFyIHQsIGk7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9IFwidW5kZWZpbmVkXCIgJiYgKHQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuKSksICh0eXBlb2YgdCA9PSBcInVuZGVmaW5lZFwiIHx8IHQgPT09IG51bGwpICYmICh0ID0gJC5jb29raWUobikpLCBpID0gRGF0ZS5wYXJzZSh0KSwgdCAmJiAhaXNOYU4oaSkgPyBuZXcgRGF0ZShpKSA6IG5ldyBEYXRlKDApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaShpKSB7XG4gICAgICAgIHR5cGVvZiBpID09IFwidW5kZWZpbmVkXCIgJiYgKGkgPSBuZXcgRGF0ZSksIHR5cGVvZiBsb2NhbFN0b3JhZ2UgIT0gXCJ1bmRlZmluZWRcIiAmJiAodC51c2VMb2NhbFN0b3JhZ2UgPyAkLmNvb2tpZShuLCBudWxsKSA6IGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG4pKSwgdC51c2VMb2NhbFN0b3JhZ2UgJiYgdHlwZW9mIGxvY2FsU3RvcmFnZSAhPSBcInVuZGVmaW5lZFwiID8gbG9jYWxTdG9yYWdlLnNldEl0ZW0obiwgaSkgOiAkLmNvb2tpZShuLCBpLCB7XG4gICAgICAgICAgICBleHBpcmVzOiAxMDBcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1KCkge1xuICAgICAgICB2YXIgbiA9IHIoKTtcbiAgICAgICAgTWF0aC5mbG9vcigobmV3IERhdGUgLSBuKSAvIDM2ZTUpID49IHQuZGF0ZURpZmZUaHJlc2hvbGRJbkhvdXJzICYmIFJvYmxveEV2ZW50TWFuYWdlci50cmlnZ2VyRXZlbnQoXCJyYnhfZXZ0X3NpdGV0b3VjaFwiKSwgaSgpXG4gICAgfVxuICAgIHZhciBuID0gXCJMYXN0QWN0aXZpdHlcIixcbiAgICAgICAgdCA9IHtcbiAgICAgICAgICAgIHVwZGF0ZUxhc3RBY3Rpdml0eUFuZEZpcmVFdmVudDogdSxcbiAgICAgICAgICAgIGdldExhc3RBY3Rpdml0eTogcixcbiAgICAgICAgICAgIHNldExhc3RBY3Rpdml0eTogaSxcbiAgICAgICAgICAgIGRhdGVEaWZmVGhyZXNob2xkSW5Ib3VyczogMyxcbiAgICAgICAgICAgIHVzZUxvY2FsU3RvcmFnZTogITFcbiAgICAgICAgfTtcbiAgICByZXR1cm4gdFxufSgpO1xuXG47IC8vLyBKU0Vycm9yVHJhY2tlci5qc1xudHlwZW9mIFJvYmxveCA9PSBcInVuZGVmaW5lZFwiICYmIChSb2Jsb3ggPSB7fSksIFJvYmxveC5KU0Vycm9yVHJhY2tlciA9IHtcbiAgICBzaG93QWxlcnQ6ICExLFxuICAgIGRlZmF1bHRQaXhlbDogXCJHQVwiLFxuICAgIGludGVybmFsRXZlbnRMaXN0ZW5lclBpeGVsRW5hYmxlZDogITEsXG4gICAgamF2YXNjcmlwdFN0YWNrVHJhY2VFbmFibGVkOiAhMSxcbiAgICBkYXRhOiB7XG4gICAgICAgIGNhdGVnb3J5OiBcIkphdmFzY3JpcHQgRXJyb3JzXCJcbiAgICB9LFxuICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdHlwZW9mIG4gIT0gXCJ1bmRlZmluZWRcIiAmJiAodHlwZW9mIG4uc2hvd0FsZXJ0ICE9IFwidW5kZWZpbmVkXCIgJiYgKHRoaXMuc2hvd0FsZXJ0ID0gbi5zaG93QWxlcnQpLCB0eXBlb2Ygbi5pbnRlcm5hbEV2ZW50TGlzdGVuZXJQaXhlbEVuYWJsZWQgIT0gXCJ1bmRlZmluZWRcIiAmJiAodGhpcy5pbnRlcm5hbEV2ZW50TGlzdGVuZXJQaXhlbEVuYWJsZWQgPSBuLmludGVybmFsRXZlbnRMaXN0ZW5lclBpeGVsRW5hYmxlZCkpLCB0aGlzLmFkZE9uRXJyb3JFdmVudEhhbmRsZXIodGhpcy5lcnJvckhhbmRsZXIpXG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGZ1bmN0aW9uKG4sIHQsIGkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFJvYmxveC5KU0Vycm9yVHJhY2tlci5kYXRhLm1zZyA9IG4sIFJvYmxveC5KU0Vycm9yVHJhY2tlci5kYXRhLnVybCA9IHQsIFJvYmxveC5KU0Vycm9yVHJhY2tlci5kYXRhLmxpbmUgPSBpLCBSb2Jsb3guSlNFcnJvclRyYWNrZXIuZGF0YS51YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LCBSb2Jsb3guSlNFcnJvclRyYWNrZXIubG9nRXhjZXB0aW9uKFJvYmxveC5KU0Vycm9yVHJhY2tlci5kYXRhKVxuICAgICAgICB9IGNhdGNoIChyKSB7fVxuICAgICAgICByZXR1cm4gITBcbiAgICB9LFxuICAgIGFkZE9uRXJyb3JFdmVudEhhbmRsZXI6IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdmFyIHQgPSB3aW5kb3cub25lcnJvcjtcbiAgICAgICAgd2luZG93Lm9uZXJyb3IgPSB0eXBlb2Ygd2luZG93Lm9uZXJyb3IgPT0gXCJmdW5jdGlvblwiID8gZnVuY3Rpb24oaSwgciwgdSkge1xuICAgICAgICAgICAgdChpLCByLCB1KSwgbihpLCByLCB1KVxuICAgICAgICB9IDogblxuICAgIH0sXG4gICAgcHJvY2Vzc0V4Y2VwdGlvbjogZnVuY3Rpb24obiwgdCkge1xuICAgICAgICBpZiAodHlwZW9mIG4gIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgdHlwZW9mIG4uY2F0ZWdvcnkgPT0gXCJ1bmRlZmluZWRcIiAmJiAobi5jYXRlZ29yeSA9IFJvYmxveC5KU0Vycm9yVHJhY2tlci5kYXRhLmNhdGVnb3J5KTtcbiAgICAgICAgICAgIHN3aXRjaCAodCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJHQVwiOlxuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiBcImNhdGVnb3J5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFwiYWN0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtc2c6IFwib3B0X2xhYmVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBcIm9wdF92YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIFJvYmxveC5KU0Vycm9yVHJhY2tlci5maXJlR0FQaXhlbChSb2Jsb3guSlNFcnJvclRyYWNrZXIuZGlzdGlsbEdBRGF0YShuLCBpKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJEaWFnXCI6XG4gICAgICAgICAgICAgICAgICAgIFJvYmxveC5KU0Vycm9yVHJhY2tlci5pbnRlcm5hbEV2ZW50TGlzdGVuZXJQaXhlbEVuYWJsZWQgJiYgKG4uY2F0ZWdvcnkgPSBcIkphdmFzY3JpcHRFeGNlcHRpb25zXCIsIG4uc2hhcmQgPSBcIldlYk1ldHJpY3NcIiwgbi5ldmVudE5hbWUgPSBcIkphdmFzY3JpcHRFeGNlcHRpb25Mb2dnaW5nRXZlbnRcIiwgUm9ibG94RXZlbnRNYW5hZ2VyLnRyaWdnZXJFdmVudChcIkphdmFzY3JpcHRFeGNlcHRpb25Mb2dnaW5nRXZlbnRcIiwgbikpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJvYmxveCBKU0Vycm9yVHJhY2tlciByZWNlaXZlZCBhbiB1bmtub3duIHBpeGVsIHRvIGZpcmVcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAhMFxuICAgICAgICB9XG4gICAgfSxcbiAgICBsb2dFeGNlcHRpb246IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgUm9ibG94LkpTRXJyb3JUcmFja2VyLnByb2Nlc3NFeGNlcHRpb24obiwgUm9ibG94LkpTRXJyb3JUcmFja2VyLmRlZmF1bHRQaXhlbCksIFJvYmxveC5KU0Vycm9yVHJhY2tlci5pbnRlcm5hbEV2ZW50TGlzdGVuZXJQaXhlbEVuYWJsZWQgJiYgUm9ibG94LkpTRXJyb3JUcmFja2VyLnByb2Nlc3NFeGNlcHRpb24obiwgXCJEaWFnXCIpLCBSb2Jsb3guSlNFcnJvclRyYWNrZXIuc2hvd0Vycm9yTWVzc2FnZShuLm1zZylcbiAgICB9LFxuICAgIGRpc3RpbGxEYXRhOiBmdW5jdGlvbihuLCB0KSB7XG4gICAgICAgIHZhciByID0ge30sXG4gICAgICAgICAgICBpO1xuICAgICAgICBmb3IgKGkgaW4gdCkgdHlwZW9mIG5baV0gIT0gXCJ1bmRlZmluZWRcIiAmJiAoclt0W2ldXSA9IGVuY29kZVVSSUNvbXBvbmVudChuW2ldKSk7XG4gICAgICAgIHJldHVybiByXG4gICAgfSxcbiAgICBkaXN0aWxsR0FEYXRhOiBmdW5jdGlvbihuLCB0KSB7XG4gICAgICAgIHZhciByID0gUm9ibG94LkpTRXJyb3JUcmFja2VyLmRpc3RpbGxEYXRhKG4sIHQpLFxuICAgICAgICAgICAgaSA9IFtkZWNvZGVVUklDb21wb25lbnQoW3IuY2F0ZWdvcnldKV07XG4gICAgICAgIHJldHVybiB0eXBlb2Ygci5hY3Rpb24gIT0gdHlwZW9mIHVuZGVmaW5lZCA/IChpID0gaS5jb25jYXQoZGVjb2RlVVJJQ29tcG9uZW50KHIuYWN0aW9uKSksIHR5cGVvZiByLm9wdF9sYWJlbCAhPSB0eXBlb2YgdW5kZWZpbmVkICYmIChpID0gaS5jb25jYXQoZGVjb2RlVVJJQ29tcG9uZW50KHIub3B0X2xhYmVsKSksIHR5cGVvZiByLm9wdF92YWx1ZSAhPSB0eXBlb2YgdW5kZWZpbmVkICYmIChpID0gaS5jb25jYXQocGFyc2VJbnQoZGVjb2RlVVJJQ29tcG9uZW50KHIub3B0X3ZhbHVlKSkpKSkpIDogUm9ibG94LkpTRXJyb3JUcmFja2VyLnNob3dBbGVydCAmJiBhbGVydChcIk1pc3NpbmcgYSByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yIEdBXCIpLCBpXG4gICAgfSxcbiAgICBjcmVhdGVVUkw6IGZ1bmN0aW9uKG4sIHQsIGkpIHtcbiAgICAgICAgdmFyIHIgPSBuLFxuICAgICAgICAgICAgZiA9IFJvYmxveC5KU0Vycm9yVHJhY2tlci5kaXN0aWxsRGF0YSh0LCBpKSxcbiAgICAgICAgICAgIHU7XG4gICAgICAgIGlmIChyICs9IFwiP1wiLCBmICE9IG51bGwpXG4gICAgICAgICAgICBmb3IgKHUgaW4gZikgdHlwZW9mIHUgIT0gdHlwZW9mIHVuZGVmaW5lZCAmJiB0Lmhhc093blByb3BlcnR5KHUpICYmIChyICs9IHUgKyBcIj1cIiArIGZbdV0gKyBcIiZcIik7XG4gICAgICAgIHJldHVybiByID0gci5zbGljZSgwLCByLmxlbmd0aCAtIDEpXG4gICAgfSxcbiAgICBmaXJlR0FQaXhlbDogZnVuY3Rpb24obikge1xuICAgICAgICB0eXBlb2YgX2dhcSAhPSBcInVuZGVmaW5lZFwiICYmIF9nYXEucHVzaChbXCJjLl90cmFja0V2ZW50XCJdLmNvbmNhdChuKSlcbiAgICB9LFxuICAgIHNob3dFcnJvck1lc3NhZ2U6IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgUm9ibG94LkpTRXJyb3JUcmFja2VyLnNob3dBbGVydCAmJiAobiAhPT0gbnVsbCA/IGFsZXJ0KG4pIDogYWxlcnQoXCJBbiBlcnJvciBvY2N1cmVkXCIpKVxuICAgIH1cbn07XG5cbjsgLy8vIFN0dWRpbzJBbGVydC5qc1xudmFyIHN0dWRpbzJBbGVydE1vZGFsID0ge1xuICAgIHNob3dQcm9tcHQ6ICExLFxuICAgIHVzZXJJZDogMCxcbiAgICB1cGRhdGVTdHVkaW9BbGVydFVzZXJQcmVmZXJlbmNlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHR5cGU6IFwiR0VUXCIsXG4gICAgICAgICAgICB1cmw6IFwiL1dlYkhhbmRsZXJzL1N0dWRpbzJBbGVydC5hc2h4P3VJZD1cIiArIHN0dWRpbzJBbGVydE1vZGFsLnVzZXJJZFxuICAgICAgICB9KVxuICAgIH0sXG4gICAgY2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICBzdHVkaW8yQWxlcnRNb2RhbC51cGRhdGVTdHVkaW9BbGVydFVzZXJQcmVmZXJlbmNlKCksICQubW9kYWwuY2xvc2UoXCIjU3R1ZGlvMkFsZXJ0TW9kYWxcIilcbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBzdHVkaW8yQWxlcnRNb2RhbC5zaG93UHJvbXB0ID0gJChcIiNTdHVkaW8yQWxlcnRNb2RhbFwiKS5kYXRhKFwic2hvd3Byb21wdFwiKSwgc3R1ZGlvMkFsZXJ0TW9kYWwudXNlcklkID0gJChcIiNTdHVkaW8yQWxlcnRNb2RhbFwiKS5kYXRhKFwidXNlcmlkXCIpO1xuICAgICAgICB2YXIgbiA9IHtcbiAgICAgICAgICAgIGVzY0Nsb3NlOiAhMCxcbiAgICAgICAgICAgIG9wYWNpdHk6IDgwLFxuICAgICAgICAgICAgb3ZlcmxheUNzczoge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMDAwXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc3R1ZGlvMkFsZXJ0TW9kYWwuc2hvd1Byb21wdCAmJiBSb2Jsb3guQ2xpZW50LmlzSURFKCkgJiYgKHN0dWRpbzJBbGVydE1vZGFsLnVwZGF0ZVN0dWRpb0FsZXJ0VXNlclByZWZlcmVuY2UoKSwgJChcIiNTdHVkaW8yQWxlcnRNb2RhbFwiKS5tb2RhbChuKSlcbiAgICB9XG59O1xuJChcIiNjbG9zZVN0dWRpbzJBbGVydFwiKS5jbGljayhmdW5jdGlvbigpIHtcbiAgICBzdHVkaW8yQWxlcnRNb2RhbC5jbG9zZSgpXG59KSwgJChmdW5jdGlvbigpIHtcbiAgICBzdHVkaW8yQWxlcnRNb2RhbC5pbml0KClcbn0pO1xuXG47IC8vLyBDbGllbnRJbnN0YWxsZXIuanNcbmZ1bmN0aW9uIHRyeVRvRG93bmxvYWQoKSB7XG4gICAgb0lGcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRvd25sb2FkSW5zdGFsbGVySUZyYW1lXCIpLCBvSUZybS5zcmMgPSBcIi9pbnN0YWxsL3NldHVwLmFzaHhcIlxufVxuXG5mdW5jdGlvbiBsb2dTdGF0aXN0aWNzKG4pIHtcbiAgICAkLmdldChcIi9pbnN0YWxsL1Zpc2l0QnV0dG9uSGFuZGxlci5hc2h4P3JlcXR5cGU9XCIgKyBuLCBmdW5jdGlvbigpIHt9KVxufVxuVHlwZS5yZWdpc3Rlck5hbWVzcGFjZShcIlJvYmxveC5DbGllbnRcIiksIFJvYmxveC5DbGllbnQuX2luc3RhbGxIb3N0ID0gbnVsbCwgUm9ibG94LkNsaWVudC5faW5zdGFsbFN1Y2Nlc3MgPSBudWxsLCBSb2Jsb3guQ2xpZW50Ll9DTFNJRCA9IG51bGwsIFJvYmxveC5DbGllbnQuX2NvbnRpbnVhdGlvbiA9IG51bGwsIFJvYmxveC5DbGllbnQuX3NraXAgPSBudWxsLCBSb2Jsb3guQ2xpZW50Ll9pc0lERSA9IG51bGwsIFJvYmxveC5DbGllbnQuX2lzUm9ibG94QnJvd3NlciA9IG51bGwsIFJvYmxveC5DbGllbnQuX2lzUGxhY2VMYXVuY2ggPSAhMSwgUm9ibG94LkNsaWVudC5fc2lsZW50TW9kZUVuYWJsZWQgPSAhMSwgUm9ibG94LkNsaWVudC5fYnJpbmdBcHBUb0Zyb250RW5hYmxlZCA9ICExLCBSb2Jsb3guQ2xpZW50Ll9udW1Mb2NrcyA9IDAsIFJvYmxveC5DbGllbnQuX2xvZ1RpbWluZyA9ICExLCBSb2Jsb3guQ2xpZW50Ll9sb2dTdGFydFRpbWUgPSBudWxsLCBSb2Jsb3guQ2xpZW50Ll9sb2dFbmRUaW1lID0gbnVsbCwgUm9ibG94LkNsaWVudC5faGlkZGVuTW9kZUVuYWJsZWQgPSAhMSwgUm9ibG94LkNsaWVudC5fcnVuSW5zdGFsbEFCVGVzdCA9IGZ1bmN0aW9uKCkge30sIFJvYmxveC5DbGllbnQuUmVsZWFzZUxhdW5jaGVyID0gZnVuY3Rpb24obiwgdCwgaSkge1xuICAgIGlmICh0ICYmIFJvYmxveC5DbGllbnQuX251bUxvY2tzLS0sIChpIHx8IFJvYmxveC5DbGllbnQuX251bUxvY2tzIDw9IDApICYmIChuICE9IG51bGwgJiYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicGx1Z2luT2JqRGl2XCIpLmlubmVySFRNTCA9IFwiXCIsIG4gPSBudWxsKSwgUm9ibG94LkNsaWVudC5fbnVtTG9ja3MgPSAwKSwgUm9ibG94LkNsaWVudC5fbG9nVGltaW5nKSB7XG4gICAgICAgIFJvYmxveC5DbGllbnQuX2xvZ0VuZFRpbWUgPSBuZXcgRGF0ZTtcbiAgICAgICAgdmFyIHIgPSBSb2Jsb3guQ2xpZW50Ll9sb2dFbmRUaW1lLmdldFRpbWUoKSAtIFJvYmxveC5DbGllbnQuX2xvZ1N0YXJ0VGltZS5nZXRUaW1lKCk7XG4gICAgICAgIGNvbnNvbGUgJiYgY29uc29sZS5sb2cgJiYgY29uc29sZS5sb2coXCJSb2Jsb3guQ2xpZW50OiBcIiArIHIgKyBcIm1zIGZyb20gQ3JlYXRlIHRvIFJlbGVhc2UuXCIpXG4gICAgfVxufSwgUm9ibG94LkNsaWVudC5HZXRJbnN0YWxsSG9zdCA9IGZ1bmN0aW9uKG4pIHtcbiAgICBpZiAod2luZG93LkFjdGl2ZVhPYmplY3QpIHJldHVybiBuLkluc3RhbGxIb3N0O1xuICAgIHZhciB0ID0gbi5HZXRfSW5zdGFsbEhvc3QoKTtcbiAgICByZXR1cm4gdC5tYXRjaCgvcm9ibG94LmNvbSQvKSA/IHQgOiB0LnN1YnN0cmluZygwLCB0Lmxlbmd0aCAtIDEpXG59LCBSb2Jsb3guQ2xpZW50LkNyZWF0ZUxhdW5jaGVyID0gZnVuY3Rpb24obikge1xuICAgIHZhciBpLCB1LCB0LCByO1xuICAgIFJvYmxveC5DbGllbnQuX2xvZ1RpbWluZyAmJiAoUm9ibG94LkNsaWVudC5fbG9nU3RhcnRUaW1lID0gbmV3IERhdGUpLCBuICYmIFJvYmxveC5DbGllbnQuX251bUxvY2tzKyssIChSb2Jsb3guQ2xpZW50Ll9pbnN0YWxsSG9zdCA9PSBudWxsIHx8IFJvYmxveC5DbGllbnQuX0NMU0lEID09IG51bGwpICYmIHR5cGVvZiBpbml0Q2xpZW50UHJvcHMgPT0gXCJmdW5jdGlvblwiICYmIGluaXRDbGllbnRQcm9wcygpLCBpID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyb2Jsb3hwbHVnaW5vYmpcIiksIHUgPSAkKFwiI3BsdWdpbk9iakRpdlwiKSwgaSB8fCAoUm9ibG94LkNsaWVudC5faGlkZGVuTW9kZUVuYWJsZWQgPSAhMSwgd2luZG93LkFjdGl2ZVhPYmplY3QgPyAodCA9ICc8b2JqZWN0IGNsYXNzaWQ9XCJjbHNpZDonICsgUm9ibG94LkNsaWVudC5fQ0xTSUQgKyAnXCInLCB0ICs9ICcgaWQ9XCJyb2Jsb3hwbHVnaW5vYmpcIiB0eXBlPVwiYXBwbGljYXRpb24veC12bmQtcm9ibG94LWxhdW5jaGVyXCInLCB0ICs9ICcgY29kZWJhc2U9XCInICsgUm9ibG94LkNsaWVudC5faW5zdGFsbEhvc3QgKyAnXCI+RmFpbGVkIHRvIElOSVQgUGx1Z2luPC9vYmplY3Q+JywgJCh1KS5hcHBlbmQodCkpIDogKHQgPSAnPG9iamVjdCBpZD1cInJvYmxveHBsdWdpbm9ialwiIHR5cGU9XCJhcHBsaWNhdGlvbi94LXZuZC1yb2Jsb3gtbGF1bmNoZXJcIj4nLCB0ICs9IFwiPHA+WW91IG5lZWQgT3VyIFBsdWdpbiBmb3IgdGhpcy4gIEdldCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbVwiLCB0ICs9ICc8YSBocmVmPVwiJyArIFJvYmxveC5DbGllbnQuX2luc3RhbGxIb3N0ICsgJ1wiPmhlcmU8L2E+LjwvcD48L29iamVjdD4nLCAkKHUpLmFwcGVuZCh0KSksIGkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJvYmxveHBsdWdpbm9ialwiKSk7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKGkgfHwgKHR5cGVvZiBjb25zb2xlLmxvZyA9PSBcInVuZGVmaW5lZFwiID8gYWxlcnQoXCJQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCFcIikgOiBjb25zb2xlLmxvZyhcIlBsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkIVwiKSksIGkuSGVsbG8oKSwgciA9IFJvYmxveC5DbGllbnQuR2V0SW5zdGFsbEhvc3QoaSksICFyIHx8IHIgIT0gUm9ibG94LkNsaWVudC5faW5zdGFsbEhvc3QpIHRocm93IFwid3JvbmcgSW5zdGFsbEhvc3Q6IChwbHVnaW5zKTogIFwiICsgciArIFwiICAoc2VydmVycyk6ICBcIiArIFJvYmxveC5DbGllbnQuX2luc3RhbGxIb3N0O1xuICAgICAgICByZXR1cm4gaVxuICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgcmV0dXJuIFJvYmxveC5DbGllbnQuUmVsZWFzZUxhdW5jaGVyKGksIG4sICExKSwgbnVsbFxuICAgIH1cbn0sIFJvYmxveC5DbGllbnQuaXNJREUgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoUm9ibG94LkNsaWVudC5faXNJREUgPT0gbnVsbCAmJiAoUm9ibG94LkNsaWVudC5faXNJREUgPSAhMSwgUm9ibG94LkNsaWVudC5faXNSb2Jsb3hCcm93c2VyID0gITEsIHdpbmRvdy5leHRlcm5hbCkpIHRyeSB7XG4gICAgICAgIHdpbmRvdy5leHRlcm5hbC5Jc1JvYmxveEFwcElERSAhPT0gdW5kZWZpbmVkICYmIChSb2Jsb3guQ2xpZW50Ll9pc0lERSA9IHdpbmRvdy5leHRlcm5hbC5Jc1JvYmxveEFwcElERSwgUm9ibG94LkNsaWVudC5faXNSb2Jsb3hCcm93c2VyID0gITApXG4gICAgfSBjYXRjaCAobikge31cbiAgICByZXR1cm4gUm9ibG94LkNsaWVudC5faXNJREVcbn0sIFJvYmxveC5DbGllbnQuaXNSb2Jsb3hCcm93c2VyID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFJvYmxveC5DbGllbnQuaXNJREUoKSwgUm9ibG94LkNsaWVudC5faXNSb2Jsb3hCcm93c2VyXG59LCBSb2Jsb3guQ2xpZW50LnJvYmxveEJyb3dzZXJJbnN0YWxsSG9zdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh3aW5kb3cuZXh0ZXJuYWwpIHRyeSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuZXh0ZXJuYWwuSW5zdGFsbEhvc3RcbiAgICB9IGNhdGNoIChuKSB7fVxuICAgIHJldHVybiBcIlwiXG59LCBSb2Jsb3guQ2xpZW50LklzUm9ibG94UHJveHlJbnN0YWxsZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IFJvYmxveC5DbGllbnQuQ3JlYXRlTGF1bmNoZXIoITEpLFxuICAgICAgICBuID0gITE7XG4gICAgcmV0dXJuICh0ICE9IG51bGwgJiYgKG4gPSAhMCksIFJvYmxveC5DbGllbnQuUmVsZWFzZUxhdW5jaGVyKHQsICExLCAhMSksIG4gfHwgUm9ibG94LkNsaWVudC5pc1JvYmxveEJyb3dzZXIoKSkgPyAhMCA6ICExXG59LCBSb2Jsb3guQ2xpZW50LklzUm9ibG94SW5zdGFsbGVkID0gZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHQgPSBSb2Jsb3guQ2xpZW50LkNyZWF0ZUxhdW5jaGVyKCExKSxcbiAgICAgICAgICAgIG4gPSBSb2Jsb3guQ2xpZW50LkdldEluc3RhbGxIb3N0KHQpO1xuICAgICAgICByZXR1cm4gUm9ibG94LkNsaWVudC5SZWxlYXNlTGF1bmNoZXIodCwgITEsICExKSwgbiA9PSBSb2Jsb3guQ2xpZW50Ll9pbnN0YWxsSG9zdFxuICAgIH0gY2F0Y2ggKGkpIHtcbiAgICAgICAgcmV0dXJuIFJvYmxveC5DbGllbnQuaXNSb2Jsb3hCcm93c2VyKCkgPyAobiA9IFJvYmxveC5DbGllbnQucm9ibG94QnJvd3Nlckluc3RhbGxIb3N0KCksIG4gPT0gUm9ibG94LkNsaWVudC5faW5zdGFsbEhvc3QpIDogITFcbiAgICB9XG59LCBSb2Jsb3guQ2xpZW50LlNldFN0YXJ0SW5IaWRkZW5Nb2RlID0gZnVuY3Rpb24obikge1xuICAgIHRyeSB7XG4gICAgICAgIHZhciB0ID0gUm9ibG94LkNsaWVudC5DcmVhdGVMYXVuY2hlcighMSk7XG4gICAgICAgIGlmICh0ICE9PSBudWxsKSByZXR1cm4gdC5TZXRTdGFydEluSGlkZGVuTW9kZShuKSwgUm9ibG94LkNsaWVudC5faGlkZGVuTW9kZUVuYWJsZWQgPSBuLCAhMFxuICAgIH0gY2F0Y2ggKGkpIHt9XG4gICAgcmV0dXJuICExXG59LCBSb2Jsb3guQ2xpZW50LlVuaGlkZUFwcCA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmIChSb2Jsb3guQ2xpZW50Ll9oaWRkZW5Nb2RlRW5hYmxlZCkge1xuICAgICAgICAgICAgdmFyIG4gPSBSb2Jsb3guQ2xpZW50LkNyZWF0ZUxhdW5jaGVyKCExKTtcbiAgICAgICAgICAgIG4uVW5oaWRlQXBwKClcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKHQpIHt9XG59LCBSb2Jsb3guQ2xpZW50LlVwZGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHZhciBuID0gUm9ibG94LkNsaWVudC5DcmVhdGVMYXVuY2hlcighMSk7XG4gICAgICAgIG4uVXBkYXRlKCksIFJvYmxveC5DbGllbnQuUmVsZWFzZUxhdW5jaGVyKG4sICExLCAhMSlcbiAgICB9IGNhdGNoICh0KSB7XG4gICAgICAgIGFsZXJ0KFwiRXJyb3IgdXBkYXRpbmc6IFwiICsgdClcbiAgICB9XG59LCBSb2Jsb3guQ2xpZW50LldhaXRGb3JSb2Jsb3ggPSBmdW5jdGlvbihuKSB7XG4gICAgaWYgKFJvYmxveC5DbGllbnQuX3NraXApIHJldHVybiB3aW5kb3cubG9jYXRpb24gPSBSb2Jsb3guQ2xpZW50Ll9za2lwLCAhMTtcbiAgICBpZiAoUm9ibG94LkNsaWVudC5fY29udGludWF0aW9uID0gbiwgUm9ibG94LkNsaWVudC5fY2FuY2VsbGVkID0gITEsICFSb2Jsb3guQ2xpZW50LklzUm9ibG94UHJveHlJbnN0YWxsZWQoKSAmJiBSb2Jsb3guQ2xpZW50LkltcGxlbWVudHNQcm94eSkge1xuICAgICAgICBSb2Jsb3guSW5zdGFsbGF0aW9uSW5zdHJ1Y3Rpb25zLnNob3coKSwgUm9ibG94LkNsaWVudC5ydW5JbnN0YWxsQUJUZXN0KCk7XG4gICAgICAgIHZhciB0ID0gXCJXaW5kb3dzXCI7XG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKFwiTWFjXCIpICE9IC0xICYmICh0ID0gXCJNYWNcIiksIHR5cGVvZiBfZ2FxICE9IHR5cGVvZiB1bmRlZmluZWQgJiYgKF9nYXEucHVzaChbXCJfdHJhY2tFdmVudFwiLCBcIkluc3RhbGwgQmVnaW5cIiwgdF0pLCBfZ2FxLnB1c2goW1wiYi5fdHJhY2tFdmVudFwiLCBcIkluc3RhbGwgQmVnaW5cIiwgdF0pKSwgUm9ibG94RXZlbnRNYW5hZ2VyLnRyaWdnZXJFdmVudChcInJieF9ldnRfaW5zdGFsbF9iZWdpblwiLCB7XG4gICAgICAgICAgICBvczogdFxuICAgICAgICB9KSwgd2luZG93LmNocm9tZSAmJiAod2luZG93LmxvY2F0aW9uLmhhc2ggPSBcIiNjaHJvbWVJbnN0YWxsXCIsICQuY29va2llKFwiY2hyb21lSW5zdGFsbFwiLCBuLnRvU3RyaW5nKCkucmVwbGFjZSgvcGxheV9wbGFjZUlkLywgcGxheV9wbGFjZUlkLnRvU3RyaW5nKCkpKSksIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgUm9ibG94LkNsaWVudC5fb250aW1lcigpXG4gICAgICAgIH0sIDFlMyksIHRyeVRvRG93bmxvYWQoKSwgITBcbiAgICB9XG4gICAgcmV0dXJuIFJvYmxveC5DbGllbnQuX2NvbnRpbnVhdGlvbigpLCAhMVxufSwgUm9ibG94LkNsaWVudC5SZXN1bWVUaW1lciA9IGZ1bmN0aW9uKG4pIHtcbiAgICBSb2Jsb3guQ2xpZW50Ll9jb250aW51YXRpb24gPSBuLCBSb2Jsb3guQ2xpZW50Ll9jYW5jZWxsZWQgPSAhMSwgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIFJvYmxveC5DbGllbnQuX29udGltZXIoKVxuICAgIH0sIDApXG59LCBSb2Jsb3guQ2xpZW50LlJlZnJlc2ggPSBmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgICBuYXZpZ2F0b3IucGx1Z2lucy5yZWZyZXNoKCExKVxuICAgIH0gY2F0Y2ggKG4pIHt9XG59LCBSb2Jsb3guQ2xpZW50Ll9vbkNhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBSb2Jsb3guSW5zdGFsbGF0aW9uSW5zdHJ1Y3Rpb25zLmhpZGUoKSwgUm9ibG94LkNsaWVudC5fY2FuY2VsbGVkID0gITAsICExXG59LCBSb2Jsb3guQ2xpZW50Ll9vbnRpbWVyID0gZnVuY3Rpb24oKSB7XG4gICAgUm9ibG94LkNsaWVudC5fY2FuY2VsbGVkIHx8IChSb2Jsb3guQ2xpZW50LlJlZnJlc2goKSwgUm9ibG94LkNsaWVudC5Jc1JvYmxveFByb3h5SW5zdGFsbGVkKCkgPyAoUm9ibG94Lkluc3RhbGxhdGlvbkluc3RydWN0aW9ucy5oaWRlKCksIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICB3aW5kb3cuY2hyb21lICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoID09IFwiI2Nocm9tZUluc3RhbGxcIiAmJiAod2luZG93LmxvY2F0aW9uLmhhc2ggPSBcIlwiLCAkLmNvb2tpZShcImNocm9tZUluc3RhbGxcIiwgbnVsbCkpXG4gICAgfSwgNWUzKSwgUm9ibG94LkNsaWVudC5fY29udGludWF0aW9uKCksIFJvYmxveC5DbGllbnQuX2luc3RhbGxTdWNjZXNzICYmIFJvYmxveC5DbGllbnQuX2luc3RhbGxTdWNjZXNzKCkpIDogd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIFJvYmxveC5DbGllbnQuX29udGltZXIoKVxuICAgIH0sIDFlMykpXG59O1xuXG47IC8vLyBJbnN0YWxsYXRpb25JbnN0cnVjdGlvbnMuanNcbnR5cGVvZiBSb2Jsb3ggPT0gXCJ1bmRlZmluZWRcIiAmJiAoUm9ibG94ID0ge30pLCBSb2Jsb3guSW5zdGFsbGF0aW9uSW5zdHJ1Y3Rpb25zID0gZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gaSgpIHtcbiAgICAgICAgdmFyIHQsIGksIHI7XG4gICAgICAgIG4oKSwgdCA9IDAsIGkgPSAkKFwiLkluc3RhbGxJbnN0cnVjdGlvbnNJbWFnZVwiKSwgaSAmJiB0eXBlb2YgJChpKS5hdHRyKFwibW9kYWx3aWR0aFwiKSAhPSBcInVuZGVmaW5lZFwiICYmICh0ID0gJChcIi5JbnN0YWxsSW5zdHJ1Y3Rpb25zSW1hZ2VcIikuYXR0cihcIm1vZGFsd2lkdGhcIikpLCB0ID4gMCA/IChyID0gKCQod2luZG93KS53aWR0aCgpIC0gKHQgLSAxMCkpIC8gMiwgJChcIiNJbnN0YWxsYXRpb25JbnN0cnVjdGlvbnNcIikubW9kYWwoe1xuICAgICAgICAgICAgZXNjQ2xvc2U6ICEwLFxuICAgICAgICAgICAgb3BhY2l0eTogNTAsXG4gICAgICAgICAgICBtaW5XaWR0aDogdCxcbiAgICAgICAgICAgIG1heFdpZHRoOiB0LFxuICAgICAgICAgICAgb3ZlcmxheUNzczoge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMDAwXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwb3NpdGlvbjogWzIwLCByXVxuICAgICAgICB9KSkgOiAkKFwiI0luc3RhbGxhdGlvbkluc3RydWN0aW9uc1wiKS5tb2RhbCh7XG4gICAgICAgICAgICBlc2NDbG9zZTogITAsXG4gICAgICAgICAgICBvcGFjaXR5OiA1MCxcbiAgICAgICAgICAgIG1heFdpZHRoOiAkKHdpbmRvdykud2lkdGgoKSAvIDIsXG4gICAgICAgICAgICBtaW5XaWR0aDogJCh3aW5kb3cpLndpZHRoKCkgLyAyLFxuICAgICAgICAgICAgb3ZlcmxheUNzczoge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMDAwXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwb3NpdGlvbjogWzIwLCBcIjI1JVwiXVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHIoKSB7XG4gICAgICAgICQubW9kYWwuY2xvc2UoKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICAgIHZhciBuID0gJChcIi5JbnN0YWxsSW5zdHJ1Y3Rpb25zSW1hZ2VcIik7XG4gICAgICAgIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL01hYyBPUyBYIDEwW198XFwuXTUvKSA/IG4gJiYgdHlwZW9mICQobikuYXR0cihcIm9sZG1hY2RlbGF5c3JjXCIpICE9IFwidW5kZWZpbmVkXCIgJiYgJChcIi5JbnN0YWxsSW5zdHJ1Y3Rpb25zSW1hZ2VcIikuYXR0cihcInNyY1wiLCAkKFwiLkluc3RhbGxJbnN0cnVjdGlvbnNJbWFnZVwiKS5hdHRyKFwib2xkbWFjZGVsYXlzcmNcIikpIDogbiAmJiB0eXBlb2YgJChuKS5hdHRyKFwiZGVsYXlzcmNcIikgIT0gXCJ1bmRlZmluZWRcIiAmJiAkKFwiLkluc3RhbGxJbnN0cnVjdGlvbnNJbWFnZVwiKS5hdHRyKFwic3JjXCIsICQoXCIuSW5zdGFsbEluc3RydWN0aW9uc0ltYWdlXCIpLmF0dHIoXCJkZWxheXNyY1wiKSlcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2hvdzogaSxcbiAgICAgICAgaGlkZTogclxuICAgIH1cbn0oKTtcblxuOyAvLy8gTWFkU3RhdHVzLmpzXG5NYWRTdGF0dXMgPSB7XG4gICAgcnVubmluZzogITEsXG4gICAgaW5pdDogZnVuY3Rpb24obiwgdCwgaSwgcikge1xuICAgICAgICBNYWRTdGF0dXMucnVubmluZyAmJiBNYWRTdGF0dXMuc3RvcCgpLCBNYWRTdGF0dXMudXBkYXRlSW50ZXJ2YWwgPSBpID8gaSA6IDJlMywgTWFkU3RhdHVzLmZhZGVJbnRlcnZhbCA9IHIgPyByIDogMWUzLCBNYWRTdGF0dXMudGltZW91dCA9IG51bGwsIE1hZFN0YXR1cy5ydW5uaW5nID0gITAsIE1hZFN0YXR1cy5maWVsZCA9IG4sIE1hZFN0YXR1cy5iYWNrQnVmZmVyID0gdCwgTWFkU3RhdHVzLmZpZWxkLnNob3coKSwgTWFkU3RhdHVzLmJhY2tCdWZmZXIuaGlkZSgpXG4gICAgfSxcbiAgICBwYXJ0aWNpcGxlOiBbXCJBY2NlbGVyYXRpbmdcIiwgXCJBZ2dyZWdhdGluZ1wiLCBcIkFsbG9jYXRpbmdcIiwgXCJBcXVpcmluZ1wiLCBcIkF1dG9tYXRpbmdcIiwgXCJCYWNrdHJhY2luZ1wiLCBcIkJsb3h4aW5nXCIsIFwiQm9vdHN0cmFwaW5nXCIsIFwiQ2FsaWJyYXRpbmdcIiwgXCJDb3JyZWxhdGluZ1wiLCBcIkRlLW5vb2JpbmdcIiwgXCJEZS1pb25pemluZ1wiLCBcIkRlcml2aW5nXCIsIFwiRW5lcmdpemluZ1wiLCBcIkZpbHRlcmluZ1wiLCBcIkdlbmVyYXRpbmdcIiwgXCJJbmRleGluZ1wiLCBcIkxvYWRpbmdcIiwgXCJOb29iaW5nXCIsIFwiT3B0aW1pemluZ1wiLCBcIk94aWRpemluZ1wiLCBcIlF1ZXVlaW5nXCIsIFwiUGFyc2luZ1wiLCBcIlByb2Nlc3NpbmdcIiwgXCJSYXN0ZXJpemluZ1wiLCBcIlJlYWRpbmdcIiwgXCJSZWdpc3RlcmluZ1wiLCBcIlJlLXJvdXRpbmdcIiwgXCJSZXNvbHZpbmdcIiwgXCJTYW1wbGluZ1wiLCBcIlVwZGF0aW5nXCIsIFwiV3JpdGluZ1wiXSxcbiAgICBtb2RpZmllcjogW1wiQmxveFwiLCBcIkNvdW50IFplcm9cIiwgXCJDeWxvblwiLCBcIkRhdGFcIiwgXCJFY3RvcGxhc21cIiwgXCJFbmNyeXB0aW9uXCIsIFwiRXZlbnRcIiwgXCJGYXJuc3dvcnRoXCIsIFwiQmVib3BcIiwgXCJGbHV4IENhcGFjaXRvclwiLCBcIkZ1c2lvblwiLCBcIkdhbWVcIiwgXCJHaWJzb25cIiwgXCJIb3N0XCIsIFwiTWFpbmZyYW1lXCIsIFwiTWV0YXZlcnNlXCIsIFwiTmVyZiBIZXJkZXJcIiwgXCJOZXV0cm9uXCIsIFwiTm9vYlwiLCBcIlBob3RvblwiLCBcIlByb2ZpbGVcIiwgXCJTY3JpcHRcIiwgXCJTa3luZXRcIiwgXCJUQVJESVNcIiwgXCJWaXJ0dWFsXCJdLFxuICAgIHN1YmplY3Q6IFtcIkFuYWxvZ3NcIiwgXCJCbG9ja3NcIiwgXCJDYW5ub25cIiwgXCJDaGFubmVsc1wiLCBcIkNvcmVcIiwgXCJEYXRhYmFzZVwiLCBcIkRpbWVuc2lvbnNcIiwgXCJEaXJlY3RpdmVzXCIsIFwiRW5naW5lXCIsIFwiRmlsZXNcIiwgXCJHZWFyXCIsIFwiSW5kZXhcIiwgXCJMYXllclwiLCBcIk1hdHJpeFwiLCBcIlBhcmFkb3hcIiwgXCJQYXJhbWV0ZXJzXCIsIFwiUGFyc2Vjc1wiLCBcIlBpcGVsaW5lXCIsIFwiUGxheWVyc1wiLCBcIlBvcnRzXCIsIFwiUHJvdG9jb2xzXCIsIFwiUmVhY3RvcnNcIiwgXCJTcGhlcmVcIiwgXCJTcG9vbGVyXCIsIFwiU3RyZWFtXCIsIFwiU3dpdGNoZXNcIiwgXCJUYWJsZVwiLCBcIlRhcmdldHNcIiwgXCJUaHJvdHRsZVwiLCBcIlRva2Vuc1wiLCBcIlRvcnBlZG9lc1wiLCBcIlR1YmVzXCJdLFxuICAgIG5ld0xpYjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBsaWJTdHJpbmcgPSB0aGlzLnBhcnRpY2lwbGVbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5wYXJ0aWNpcGxlLmxlbmd0aCldICsgXCIgXCIgKyB0aGlzLm1vZGlmaWVyW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRoaXMubW9kaWZpZXIubGVuZ3RoKV0gKyBcIiBcIiArIHRoaXMuc3ViamVjdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnN1YmplY3QubGVuZ3RoKV0gKyBcIi4uLlwiXG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICAgIE1hZFN0YXR1cy50aW1lb3V0ID09IG51bGwgJiYgKE1hZFN0YXR1cy50aW1lb3V0ID0gc2V0SW50ZXJ2YWwoXCJNYWRTdGF0dXMudXBkYXRlKClcIiwgTWFkU3RhdHVzLnVwZGF0ZUludGVydmFsKSwgTWFkU3RhdHVzLnJ1bm5pbmcgPSAhMClcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChNYWRTdGF0dXMudGltZW91dCksIE1hZFN0YXR1cy50aW1lb3V0ID0gbnVsbCwgTWFkU3RhdHVzLmZpZWxkWzBdLmlubmVySFRNTCA9IHR5cGVvZiBuICE9IHR5cGVvZiB1bmRlZmluZWQgPyBuIDogXCJcIiwgTWFkU3RhdHVzLnJ1bm5pbmcgPSAhMVxuICAgIH0sXG4gICAgbWFudWFsVXBkYXRlOiBmdW5jdGlvbihuLCB0LCBpKSB7XG4gICAgICAgIE1hZFN0YXR1cy50aW1lb3V0ICYmIE1hZFN0YXR1cy5zdG9wKCksIHRoaXMudXBkYXRlKG4sIGkpLCB0ICYmIHNldFRpbWVvdXQoXCJNYWRTdGF0dXMuc3RhcnQoKVwiLCAxZTMpXG4gICAgfSxcbiAgICB1cGRhdGU6IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICAgICAgKE1hZFN0YXR1cy5iYWNrQnVmZmVyWzBdLmlubmVySFRNTCA9IHR5cGVvZiBuICE9IHR5cGVvZiB1bmRlZmluZWQgPyBuIDogdGhpcy5uZXdMaWIoKSwgdHlwZW9mIG5vQW5pbSA9PSB0eXBlb2YgdW5kZWZpbmVkIHx8IHQgIT0gITEpICYmICh0aGlzLmZpZWxkLmhpZGUoKSwgdGhpcy5iYWNrQnVmZmVyLmZhZGVJbih0aGlzLmZhZGVJbnRlcnZhbCArIDIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgTWFkU3RhdHVzLmZpZWxkWzBdLmlubmVySFRNTCA9IE1hZFN0YXR1cy5iYWNrQnVmZmVyWzBdLmlubmVySFRNTCwgTWFkU3RhdHVzLmZpZWxkLnNob3coKSwgTWFkU3RhdHVzLmJhY2tCdWZmZXIuaGlkZSgpXG4gICAgICAgIH0pKVxuICAgIH1cbn07XG5cbjsgLy8vIFBsYWNlTGF1bmNoZXIuanNcbnZhciBSQlggPSB7fSxcbiAgICBSb2Jsb3hMYXVuY2hTdGF0ZXMgPSB7XG4gICAgICAgIFN0YXJ0aW5nU2VydmVyOiBcIlN0YXJ0aW5nU2VydmVyXCIsXG4gICAgICAgIFN0YXJ0aW5nQ2xpZW50OiBcIlN0YXJ0aW5nQ2xpZW50XCIsXG4gICAgICAgIFVwZ3JhZGluZzogXCJVcGdyYWRpbmdcIixcbiAgICAgICAgTm9uZTogXCJOb25lXCJcbiAgICB9LFxuICAgIFJvYmxveExhdW5jaCA9IHtcbiAgICAgICAgbGF1bmNoR2FtZVBhZ2U6IG51bGwsXG4gICAgICAgIHRpbWVyOiBudWxsLFxuICAgICAgICBjbGllbnRNZXRyaWNUeXBlOiBudWxsLFxuICAgICAgICBsYXVuY2hlcjogbnVsbCxcbiAgICAgICAgZ29vZ2xlQW5hbHl0aWNzQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgUm9ibG94TGF1bmNoLl9Hb29nbGVBbmFseXRpY3NDYWxsYmFjayAmJiBSb2Jsb3hMYXVuY2guX0dvb2dsZUFuYWx5dGljc0NhbGxiYWNrKClcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGU6IFJvYmxveExhdW5jaFN0YXRlcy5Ob25lLFxuICAgICAgICBzZWN1cmVBdXRoZW50aWNhdGU6ICExXG4gICAgfSxcbiAgICBSb2Jsb3hQbGFjZUxhdW5jaGVyU2VydmljZSA9IHtcbiAgICAgICAgTG9nSm9pbkNsaWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICQuZ2V0KFwiL0dhbWUvUGxhY2VsYXVuY2hlci5hc2h4XCIsIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0OiBcIkxvZ0pvaW5DbGlja1wiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgICBSZXF1ZXN0R2FtZTogZnVuY3Rpb24obiwgdCwgaSwgciwgdSwgZikge1xuICAgICAgICAgICAgaSA9IGkgIT09IG51bGwgJiYgaSAhPT0gdW5kZWZpbmVkID8gaSA6IFwiXCIsICQuZ2V0SlNPTihcIi9HYW1lL1BsYWNlTGF1bmNoZXIuYXNoeFwiLCB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdDogXCJSZXF1ZXN0R2FtZVwiLFxuICAgICAgICAgICAgICAgIHBsYWNlSWQ6IG4sXG4gICAgICAgICAgICAgICAgaXNQYXJ0eUxlYWRlcjogdCxcbiAgICAgICAgICAgICAgICBnZW5kZXI6IGlcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgICAgICBuLkVycm9yID8gdShuLkVycm9yLCBmKSA6IHIobiwgZilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIFJlcXVlc3RQbGF5V2l0aFBhcnR5OiBmdW5jdGlvbihuLCB0LCBpLCByLCB1LCBmKSB7XG4gICAgICAgICAgICAkLmdldEpTT04oXCIvR2FtZS9QbGFjZUxhdW5jaGVyLmFzaHhcIiwge1xuICAgICAgICAgICAgICAgIHJlcXVlc3Q6IFwiUmVxdWVzdFBsYXlXaXRoUGFydHlcIixcbiAgICAgICAgICAgICAgICBwbGFjZUlkOiBuLFxuICAgICAgICAgICAgICAgIHBhcnR5R3VpZDogdCxcbiAgICAgICAgICAgICAgICBnYW1lSWQ6IGlcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgICAgICBuLkVycm9yID8gdShuLkVycm9yLCBmKSA6IHIobiwgZilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIFJlcXVlc3RHcm91cEJ1aWxkR2FtZTogZnVuY3Rpb24obiwgdCwgaSwgcikge1xuICAgICAgICAgICAgJC5nZXRKU09OKFwiL0dhbWUvUGxhY2VMYXVuY2hlci5hc2h4XCIsIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0OiBcIlJlcXVlc3RHcm91cEJ1aWxkR2FtZVwiLFxuICAgICAgICAgICAgICAgIHBsYWNlSWQ6IG5cbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgICAgICBuLkVycm9yID8gaShuLkVycm9yLCByKSA6IHQobiwgcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIFJlcXVlc3RGb2xsb3dVc2VyOiBmdW5jdGlvbihuLCB0LCBpLCByKSB7XG4gICAgICAgICAgICAkLmdldEpTT04oXCIvR2FtZS9QbGFjZUxhdW5jaGVyLmFzaHhcIiwge1xuICAgICAgICAgICAgICAgIHJlcXVlc3Q6IFwiUmVxdWVzdEZvbGxvd1VzZXJcIixcbiAgICAgICAgICAgICAgICB1c2VySWQ6IG5cbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgICAgICBuLkVycm9yID8gaShuLkVycm9yLCByKSA6IHQobiwgcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIFJlcXVlc3RHYW1lSm9iOiBmdW5jdGlvbihuLCB0LCBpLCByLCB1LCBmKSB7XG4gICAgICAgICAgICAkLmdldEpTT04oXCIvR2FtZS9QbGFjZUxhdW5jaGVyLmFzaHhcIiwge1xuICAgICAgICAgICAgICAgIHJlcXVlc3Q6IFwiUmVxdWVzdEdhbWVKb2JcIixcbiAgICAgICAgICAgICAgICBwbGFjZUlkOiBuLFxuICAgICAgICAgICAgICAgIGdhbWVJZDogdCxcbiAgICAgICAgICAgICAgICBnYW1lSm9iSWQ6IGlcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgICAgICBuLkVycm9yID8gdShuLkVycm9yLCBmKSA6IHIobiwgZilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIENoZWNrR2FtZUpvYlN0YXR1czogZnVuY3Rpb24obiwgdCwgaSwgcikge1xuICAgICAgICAgICAgJC5nZXRKU09OKFwiL0dhbWUvUGxhY2VMYXVuY2hlci5hc2h4XCIsIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0OiBcIkNoZWNrR2FtZUpvYlN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIGpvYklkOiBuXG4gICAgICAgICAgICB9LCBmdW5jdGlvbihuKSB7XG4gICAgICAgICAgICAgICAgbi5FcnJvciA/IGkobi5FcnJvciwgcikgOiB0KG4sIHIpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfTtcblJvYmxveExhdW5jaC5SZXF1ZXN0UGxheVdpdGhQYXJ0eSA9IGZ1bmN0aW9uKG4sIHQsIGksIHIpIHtcbiAgICBSb2Jsb3hQbGFjZUxhdW5jaGVyU2VydmljZS5Mb2dKb2luQ2xpY2soKSwgUm9ibG94TGF1bmNoLnRpbWVyID0gbmV3IERhdGUsIFJvYmxveExhdW5jaC5zdGF0ZSA9IFJvYmxveExhdW5jaFN0YXRlcy5Ob25lLCBSb2Jsb3hMYXVuY2guY2xpZW50TWV0cmljVHlwZSA9IFwiV2ViUGxheVwiLCBjaGVja1JvYmxveEluc3RhbGwoKSAmJiAoUm9ibG94TGF1bmNoLmxhdW5jaGVyID09PSBudWxsICYmIChSb2Jsb3hMYXVuY2gubGF1bmNoZXIgPSBuZXcgUkJYLlBsYWNlTGF1bmNoZXIobikpLCBSb2Jsb3hMYXVuY2gubGF1bmNoZXIuUmVxdWVzdFBsYXlXaXRoUGFydHkodCwgaSwgcikpXG59LCBSb2Jsb3hMYXVuY2guUmVxdWVzdEdhbWUgPSBmdW5jdGlvbihuLCB0LCBpKSB7XG4gICAgUm9ibG94UGxhY2VMYXVuY2hlclNlcnZpY2UuTG9nSm9pbkNsaWNrKCksIFJvYmxveExhdW5jaC50aW1lciA9IG5ldyBEYXRlLCBSb2Jsb3hMYXVuY2guc3RhdGUgPSBSb2Jsb3hMYXVuY2hTdGF0ZXMuTm9uZSwgUm9ibG94TGF1bmNoLmNsaWVudE1ldHJpY1R5cGUgPSBcIldlYlBsYXlcIiwgY2hlY2tSb2Jsb3hJbnN0YWxsKCkgJiYgKFJvYmxveExhdW5jaC5sYXVuY2hlciA9PT0gbnVsbCAmJiAoUm9ibG94TGF1bmNoLmxhdW5jaGVyID0gbmV3IFJCWC5QbGFjZUxhdW5jaGVyKG4pKSwgUm9ibG94TGF1bmNoLmxhdW5jaGVyLlJlcXVlc3RHYW1lKHQsIGkpKVxufSwgUm9ibG94TGF1bmNoLlJlcXVlc3RHcm91cEJ1aWxkR2FtZSA9IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICBSb2Jsb3hQbGFjZUxhdW5jaGVyU2VydmljZS5Mb2dKb2luQ2xpY2soKSwgUm9ibG94TGF1bmNoLnRpbWVyID0gbmV3IERhdGUsIFJvYmxveExhdW5jaC5zdGF0ZSA9IFJvYmxveExhdW5jaFN0YXRlcy5Ob25lLCBSb2Jsb3hMYXVuY2guY2xpZW50TWV0cmljVHlwZSA9IFwiV2ViUGxheVwiLCBjaGVja1JvYmxveEluc3RhbGwoKSAmJiAoUm9ibG94TGF1bmNoLmxhdW5jaGVyID09PSBudWxsICYmIChSb2Jsb3hMYXVuY2gubGF1bmNoZXIgPSBuZXcgUkJYLlBsYWNlTGF1bmNoZXIobikpLCBSb2Jsb3hMYXVuY2gubGF1bmNoZXIuUmVxdWVzdEdyb3VwQnVpbGRHYW1lKHQpKVxufSwgUm9ibG94TGF1bmNoLlJlcXVlc3RHYW1lSm9iID0gZnVuY3Rpb24obiwgdCwgaSwgcikge1xuICAgIFJvYmxveFBsYWNlTGF1bmNoZXJTZXJ2aWNlLkxvZ0pvaW5DbGljaygpLCBSb2Jsb3hMYXVuY2gudGltZXIgPSBuZXcgRGF0ZSwgUm9ibG94TGF1bmNoLnN0YXRlID0gUm9ibG94TGF1bmNoU3RhdGVzLk5vbmUsIFJvYmxveExhdW5jaC5jbGllbnRNZXRyaWNUeXBlID0gXCJXZWJKb2luXCIsIGNoZWNrUm9ibG94SW5zdGFsbCgpICYmIChSb2Jsb3hMYXVuY2gubGF1bmNoZXIgPT09IG51bGwgJiYgKFJvYmxveExhdW5jaC5sYXVuY2hlciA9IG5ldyBSQlguUGxhY2VMYXVuY2hlcihuKSksIFJvYmxveExhdW5jaC5sYXVuY2hlci5SZXF1ZXN0R2FtZUpvYih0LCBpLCByKSlcbn0sIFJvYmxveExhdW5jaC5SZXF1ZXN0Rm9sbG93VXNlciA9IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICBSb2Jsb3hQbGFjZUxhdW5jaGVyU2VydmljZS5Mb2dKb2luQ2xpY2soKSwgUm9ibG94TGF1bmNoLnRpbWVyID0gbmV3IERhdGUsIFJvYmxveExhdW5jaC5zdGF0ZSA9IFJvYmxveExhdW5jaFN0YXRlcy5Ob25lLCBSb2Jsb3hMYXVuY2guY2xpZW50TWV0cmljVHlwZSA9IFwiV2ViRm9sbG93XCIsIGNoZWNrUm9ibG94SW5zdGFsbCgpICYmIChSb2Jsb3hMYXVuY2gubGF1bmNoZXIgPT09IG51bGwgJiYgKFJvYmxveExhdW5jaC5sYXVuY2hlciA9IG5ldyBSQlguUGxhY2VMYXVuY2hlcihuKSksIFJvYmxveExhdW5jaC5sYXVuY2hlci5SZXF1ZXN0Rm9sbG93VXNlcih0KSlcbn0sIFJvYmxveExhdW5jaC5TdGFydEdhbWUgPSBmdW5jdGlvbihuLCB0LCBpLCByLCB1KSB7XG4gICAgdmFyIG8sIGYsIGUsIHM7XG4gICAgUm9ibG94TGF1bmNoLnNlY3VyZUF1dGhlbnRpY2F0ZSAmJiAoaSA9IGkucmVwbGFjZShcImh0dHA6Ly9cIiwgXCJodHRwczovL1wiKSksIG4gPSB0eXBlb2YgUm9ibG94TGF1bmNoLlNlbGVuaXVtVGVzdE1vZGUgPT0gXCJ1bmRlZmluZWRcIiA/IG4gKyBcIiZ0ZXN0bW9kZT1mYWxzZVwiIDogbiArIFwiJnRlc3Rtb2RlPXRydWVcIiwgdHlwZW9mIHVyY2hpblRyYWNrZXIgIT0gXCJ1bmRlZmluZWRcIiAmJiB1cmNoaW5UcmFja2VyKFwiVmlzaXQvVHJ5L1wiICsgdCksIFJvYmxveExhdW5jaC5zdGF0ZSA9IFJvYmxveExhdW5jaFN0YXRlcy5TdGFydGluZ0NsaWVudCwgUm9ibG94TGF1bmNoLmdvb2dsZUFuYWx5dGljc0NhbGxiYWNrICE9PSBudWxsICYmIFJvYmxveExhdW5jaC5nb29nbGVBbmFseXRpY3NDYWxsYmFjaygpLCBvID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5leHRlcm5hbCAhPSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5leHRlcm5hbC5Jc1JvYmxveEFCQXBwKSB3aW5kb3cuZXh0ZXJuYWwuU3RhcnRHYW1lKHIsIGksIG4pO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygd2luZG93LmV4dGVybmFsICE9IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmV4dGVybmFsLklzUm9ibG94MkFwcCAmJiAobi5pbmRleE9mKFwidmlzaXRcIikgIT0gLTEgfHwgdSkpIHdpbmRvdy5leHRlcm5hbC5TdGFydEdhbWUociwgaSwgbik7XG4gICAgICAgIGVsc2UgaWYgKG8gPSBcIlJvYmxveFByb3h5L1wiLCBmID0gUm9ibG94LkNsaWVudC5DcmVhdGVMYXVuY2hlcighMCksIGYpIHtcbiAgICAgICAgICAgIG8gPSBcIlJvYmxveFByb3h5L1N0YXJ0R2FtZS9cIjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LkFjdGl2ZVhPYmplY3QgPyBmLkF1dGhlbnRpY2F0aW9uVGlja2V0ID0gciA6IGYuUHV0X0F1dGhlbnRpY2F0aW9uVGlja2V0KHIpLCB1ICYmIGYuU2V0RWRpdE1vZGUoKVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGEpIHt9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJvYmxveC5DbGllbnQuX3NpbGVudE1vZGVFbmFibGVkKSBmLlNldFNpbGVudE1vZGVFbmFibGVkKCEwKSwgUm9ibG94LlZpZGVvUHJlUm9sbC52aWRlb0luaXRpYWxpemVkICYmIFJvYmxveC5WaWRlb1ByZVJvbGwuaXNQbGF5aW5nKCkgJiYgUm9ibG94LkNsaWVudC5TZXRTdGFydEluSGlkZGVuTW9kZSghMCksIGYuU3RhcnRHYW1lKGksIG4pLCBSb2Jsb3hMYXVuY2guQ2hlY2tHYW1lU3RhcnRlZChmKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB0aHJvdyBcInNpbGVudCBtb2RlIGlzIGRpc2FibGVkLCBmYWxsIGJhY2tcIjtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmLlN0YXJ0R2FtZShpLCBuKSwgUm9ibG94LkNsaWVudC5fYnJpbmdBcHBUb0Zyb250RW5hYmxlZCkgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGYuQnJpbmdBcHBUb0Zyb250KClcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoaCkge31cbiAgICAgICAgICAgICAgICAgICAgUm9ibG94LkNsaWVudC5SZWxlYXNlTGF1bmNoZXIoZiwgITAsICExKSwgJC5tb2RhbC5jbG9zZSgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoYSkge1xuICAgICAgICAgICAgICAgIFJvYmxveC5DbGllbnQuUmVsZWFzZUxhdW5jaGVyKGYsICEwLCAhMSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFyZW50LnBsYXlGcm9tVXJsKG4pO1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfSBjYXRjaCAobCkge31cbiAgICAgICAgICAgIGlmIChSb2Jsb3guQ2xpZW50LmlzUm9ibG94QnJvd3NlcigpKSB0cnkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5leHRlcm5hbC5TdGFydEdhbWUociwgaSwgbilcbiAgICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBcIndpbmRvdy5leHRlcm5hbCBmYWxsYmFjayBmYWlsZWQsIFJvYmxveCBtdXN0IG5vdCBiZSBpbnN0YWxsZWQgb3IgSUUgY2Fubm90IGFjY2VzcyBBY3RpdmVYXCI7XG4gICAgICAgICAgICB9IGVsc2UgdGhyb3cgXCJsYXVuY2hlciBpcyBudWxsIG9yIHVuZGVmaW5lZCBhbmQgZXh0ZXJuYWwgaXMgbWlzc2luZ1wiO1xuICAgICAgICAgICAgUm9ibG94TGF1bmNoLnN0YXRlID0gUm9ibG94TGF1bmNoU3RhdGVzLk5vbmUsICQubW9kYWwuY2xvc2UoKVxuICAgICAgICB9XG4gICAgfSBjYXRjaCAoYSkge1xuICAgICAgICBpZiAoZSA9IGEubWVzc2FnZSwgZSA9PT0gXCJVc2VyIGNhbmNlbGxlZFwiICYmIHR5cGVvZiB1cmNoaW5UcmFja2VyICE9IFwidW5kZWZpbmVkXCIpIHJldHVybiB1cmNoaW5UcmFja2VyKFwiVmlzaXQvVXNlckNhbmNlbGxlZC9cIiArIHQpLCAhMTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHMgPSBuZXcgQWN0aXZlWE9iamVjdChcIk1pY3Jvc29mdC5YTUxIVFRQXCIpXG4gICAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgICAgIGUgPSBcIkZhaWxlZFhNTEhUVFAvXCIgKyBlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJvYmxveC5DbGllbnQuaXNSb2Jsb3hCcm93c2VyKCkgPyB0eXBlb2YgdXJjaGluVHJhY2tlciAhPSBcInVuZGVmaW5lZFwiICYmIHVyY2hpblRyYWNrZXIoXCJWaXNpdC9GYWlsL1wiICsgbyArIGVuY29kZVVSSUNvbXBvbmVudChlKSkgOiAodHlwZW9mIHVyY2hpblRyYWNrZXIgIT0gXCJ1bmRlZmluZWRcIiAmJiB1cmNoaW5UcmFja2VyKFwiVmlzaXQvUmVkaXJlY3QvXCIgKyBvICsgZW5jb2RlVVJJQ29tcG9uZW50KGUpKSwgd2luZG93LmxvY2F0aW9uID0gUm9ibG94TGF1bmNoLmxhdW5jaEdhbWVQYWdlKSwgITFcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB1cmNoaW5UcmFja2VyICE9IFwidW5kZWZpbmVkXCIgJiYgdXJjaGluVHJhY2tlcihcIlZpc2l0L1N1Y2Nlc3MvXCIgKyB0KSwgITBcbn0sIFJvYmxveExhdW5jaC5DaGVja0dhbWVTdGFydGVkID0gZnVuY3Rpb24obikge1xuICAgIGZ1bmN0aW9uIHIoKSB7XG4gICAgICAgIHZhciBlID0gITE7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoaSB8fCAoaSA9IHdpbmRvdy5BY3RpdmVYT2JqZWN0ID8gbi5Jc0dhbWVTdGFydGVkIDogbi5HZXRfR2FtZVN0YXJ0ZWQoKSksIGkgJiYgIVJvYmxveC5WaWRlb1ByZVJvbGwuaXNQbGF5aW5nKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoTWFkU3RhdHVzLnN0b3AoXCJDb25uZWN0aW5nIHRvIFBsYXllcnMuLi5cIiksIFJvYmxveExhdW5jaC5zdGF0ZSA9IFJvYmxveExhdW5jaFN0YXRlcy5Ob25lLCAkLm1vZGFsLmNsb3NlKCksIHQuX2NhbmNlbGxlZCA9ICEwLCBSb2Jsb3guQ2xpZW50Ll9oaWRkZW5Nb2RlRW5hYmxlZCAmJiBSb2Jsb3guQ2xpZW50LlVuaGlkZUFwcCgpLCBSb2Jsb3guQ2xpZW50Ll9icmluZ0FwcFRvRnJvbnRFbmFibGVkKSB0cnkge1xuICAgICAgICAgICAgICAgICAgICBuLkJyaW5nQXBwVG9Gcm9udCgpXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZikge31cbiAgICAgICAgICAgICAgICBSb2Jsb3guQ2xpZW50LlJlbGVhc2VMYXVuY2hlcihuLCAhMCwgITEpXG4gICAgICAgICAgICB9IGVsc2UgdC5fY2FuY2VsbGVkIHx8IHNldFRpbWVvdXQociwgMWUzKVxuICAgICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgICAgICB0Ll9jYW5jZWxsZWQgfHwgc2V0VGltZW91dChyLCAxZTMpXG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIHQgPSBSb2Jsb3hMYXVuY2gubGF1bmNoZXIsXG4gICAgICAgIGk7XG4gICAgdCA9PT0gbnVsbCAmJiAodCA9IG5ldyBSQlguUGxhY2VMYXVuY2hlcihcIlBsYWNlTGF1bmNoZXJTdGF0dXNQYW5lbFwiKSwgdC5fc2hvd0RpYWxvZygpLCB0Ll91cGRhdGVTdGF0dXMoMCkpLCBpID0gITEsIHIoKVxufSwgUm9ibG94TGF1bmNoLkNoZWNrUm9ibG94SW5zdGFsbCA9IGZ1bmN0aW9uKG4pIHtcbiAgICBpZiAoUm9ibG94LkNsaWVudC5Jc1JvYmxveEluc3RhbGxlZCgpKSByZXR1cm4gUm9ibG94LkNsaWVudC5VcGRhdGUoKSwgITA7XG4gICAgd2luZG93LmxvY2F0aW9uID0gblxufSwgUkJYLlBsYWNlTGF1bmNoZXIgPSBmdW5jdGlvbihuKSB7XG4gICAgdGhpcy5fY2FuY2VsbGVkID0gITEsIHRoaXMuX3BvcHVwSUQgPSBuLCB0aGlzLl9wb3B1cCA9ICQoXCIjXCIgKyBuKVxufSwgUkJYLlBsYWNlTGF1bmNoZXIucHJvdG90eXBlID0ge1xuICAgIF9zaG93RGlhbG9nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsbGVkID0gITEsIF9wb3B1cE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBlc2NDbG9zZTogITAsXG4gICAgICAgICAgICBvcGFjaXR5OiA4MCxcbiAgICAgICAgICAgIG92ZXJsYXlDc3M6IHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiIzAwMFwiXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMuX3BvcHVwSUQgPT0gXCJQbGFjZUxhdW5jaGVyU3RhdHVzUGFuZWxcIiAmJiAoUm9ibG94LlZpZGVvUHJlUm9sbCAmJiBSb2Jsb3guVmlkZW9QcmVSb2xsLnNob3dWaWRlb1ByZVJvbGwgJiYgIVJvYmxveC5WaWRlb1ByZVJvbGwuaXNFeGNsdWRlZCgpID8gKHRoaXMuX3BvcHVwID0gJChcIiN2aWRlb1ByZXJvbGxQYW5lbFwiKSwgX3BvcHVwT3B0aW9ucy5vblNob3cgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgICAgICBSb2Jsb3guVmlkZW9QcmVSb2xsLmNvcnJlY3RJRU1vZGFsUG9zaXRpb24obiksIFJvYmxveC5WaWRlb1ByZVJvbGwuc3RhcnQoKVxuICAgICAgICB9LCBfcG9wdXBPcHRpb25zLm9uQ2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIFJvYmxveC5WaWRlb1ByZVJvbGwuY2xvc2UoKVxuICAgICAgICB9LCBfcG9wdXBPcHRpb25zLmNsb3NlSFRNTCA9ICc8YSBocmVmPVwiI1wiIGNsYXNzPVwiSW1hZ2VCdXR0b24gY2xvc2VCdG5DaXJjbGVfMzVoIEFCQ2xvc2VDaXJjbGUgVnByQ2xvc2VCdXR0b25cIj48L2E+JykgOiAodGhpcy5fcG9wdXAgPSAkKFwiI1wiICsgdGhpcy5fcG9wdXBJRCksIF9wb3B1cE9wdGlvbnMub25DbG9zZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgUm9ibG94LlZpZGVvUHJlUm9sbC5sb2dWaWRlb1ByZVJvbGwoKSwgJC5tb2RhbC5jbG9zZSgpXG4gICAgICAgIH0pKSwgdGhpcy5fcG9wdXAubW9kYWwoX3BvcHVwT3B0aW9ucyk7XG4gICAgICAgIHZhciBuID0gdGhpcztcbiAgICAgICAgJChcIi5DYW5jZWxQbGFjZUxhdW5jaGVyQnV0dG9uXCIpLmNsaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgbi5DYW5jZWxMYXVuY2goKVxuICAgICAgICB9KSwgJChcIi5DYW5jZWxQbGFjZUxhdW5jaGVyQnV0dG9uXCIpLnNob3coKVxuICAgIH0sXG4gICAgX3JlcG9ydER1cmF0aW9uOiBmdW5jdGlvbihuLCB0KSB7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB0eXBlOiBcIkdFVFwiLFxuICAgICAgICAgICAgYXN5bmM6ICEwLFxuICAgICAgICAgICAgY2FjaGU6ICExLFxuICAgICAgICAgICAgdGltZW91dDogNWU0LFxuICAgICAgICAgICAgdXJsOiBcIi9HYW1lL0pvaW5SYXRlLmFzaHg/Yz1cIiArIFJvYmxveExhdW5jaC5jbGllbnRNZXRyaWNUeXBlICsgXCImcj1cIiArIHQgKyBcIiZkPVwiICsgbixcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCkge31cbiAgICAgICAgfSlcbiAgICB9LFxuICAgIF9vbkdhbWVTdGF0dXM6IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdmFyIHIsIGksIHQ7XG4gICAgICAgIGlmICh0aGlzLl9jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHIgPSArbmV3IERhdGUgLSBSb2Jsb3hMYXVuY2gudGltZXIuZ2V0VGltZSgpLCB0aGlzLl9yZXBvcnREdXJhdGlvbihyLCBcIkNhbmNlbFwiKTtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl91cGRhdGVTdGF0dXMobi5zdGF0dXMpLCBuLnN0YXR1cyA9PT0gMikgUm9ibG94TGF1bmNoLlN0YXJ0R2FtZShuLmpvaW5TY3JpcHRVcmwsIFwiSm9pblwiLCBuLmF1dGhlbnRpY2F0aW9uVXJsLCBuLmF1dGhlbnRpY2F0aW9uVGlja2V0KSwgaSA9ICtuZXcgRGF0ZSAtIFJvYmxveExhdW5jaC50aW1lci5nZXRUaW1lKCksIHRoaXMuX3JlcG9ydER1cmF0aW9uKGksIFwiU3VjY2Vzc1wiKTtcbiAgICAgICAgZWxzZSBpZiAobi5zdGF0dXMgPCAyIHx8IG4uc3RhdHVzID09PSA2KSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdC5fb25HYW1lU3RhdHVzKG4pXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlID0gZnVuY3Rpb24obiwgdCkge1xuICAgICAgICAgICAgICAgICAgICB0Ll9vbkdhbWVFcnJvcihuKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbyA9IHRoaXMsXG4gICAgICAgICAgICAgICAgdSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBSb2Jsb3hQbGFjZUxhdW5jaGVyU2VydmljZS5DaGVja0dhbWVKb2JTdGF0dXMobi5qb2JJZCwgZiwgZSwgbylcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQodSwgMmUzKVxuICAgICAgICB9IGVsc2Ugbi5zdGF0dXMgPT09IDQgJiYgKHQgPSArbmV3IERhdGUgLSBSb2Jsb3hMYXVuY2gudGltZXIuZ2V0VGltZSgpLCB0aGlzLl9yZXBvcnREdXJhdGlvbih0LCBcIkZhaWx1cmVcIikpXG4gICAgfSxcbiAgICBfdXBkYXRlU3RhdHVzOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIE1hZFN0YXR1cy5ydW5uaW5nIHx8IChNYWRTdGF0dXMuaW5pdCgkKHRoaXMuX3BvcHVwKS5maW5kKFwiLk1hZFN0YXR1c0ZpZWxkXCIpLCAkKHRoaXMuX3BvcHVwKS5maW5kKFwiLk1hZFN0YXR1c0JhY2tCdWZmZXJcIiksIDJlMywgODAwKSwgTWFkU3RhdHVzLnN0YXJ0KCkpO1xuICAgICAgICBzd2l0Y2ggKG4pIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBNYWRTdGF0dXMubWFudWFsVXBkYXRlKFwiQSBzZXJ2ZXIgaXMgbG9hZGluZyB0aGUgZ2FtZS4uLlwiLCAhMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgTWFkU3RhdHVzLm1hbnVhbFVwZGF0ZShcIlRoZSBzZXJ2ZXIgaXMgcmVhZHkuIEpvaW5pbmcgdGhlIGdhbWUuLi5cIiwgITApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIE1hZFN0YXR1cy5tYW51YWxVcGRhdGUoXCJKb2luaW5nIGdhbWVzIGlzIHRlbXBvcmFyaWx5IGRpc2FibGVkIHdoaWxlIHdlIHVwZ3JhZGUuIFBsZWFzZSB0cnkgYWdhaW4gc29vbi5cIiwgITEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIE1hZFN0YXR1cy5tYW51YWxVcGRhdGUoXCJBbiBlcnJvciBvY2N1cnJlZC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5cIiwgITEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgIE1hZFN0YXR1cy5tYW51YWxVcGRhdGUoXCJUaGUgZ2FtZSB5b3UgcmVxdWVzdGVkIGhhcyBlbmRlZC5cIiwgITEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgIE1hZFN0YXR1cy5tYW51YWxVcGRhdGUoXCJUaGUgZ2FtZSB5b3UgcmVxdWVzdGVkIGlzIGN1cnJlbnRseSBmdWxsLiBXYWl0aW5nIGZvciBhbiBvcGVuaW5nLi4uXCIsICEwLCAhMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgTWFkU3RhdHVzLm1hbnVhbFVwZGF0ZShcIlJvYmxveCBpcyB1cGRhdGluZy4gUGxlYXNlIHdhaXQuLi5cIiwgITApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgIE1hZFN0YXR1cy5tYW51YWxVcGRhdGUoXCJSZXF1ZXN0aW5nIGEgc2VydmVyXCIsICEwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgTWFkU3RhdHVzLnN0b3AoXCJDb25uZWN0aW5nIHRvIFBsYXllcnMuLi5cIilcbiAgICAgICAgfVxuICAgICAgICAkKHRoaXMuX3BvcHVwKS5maW5kKFwiLk1hZFN0YXR1c1N0YXJ0aW5nXCIpLmNzcyhcImRpc3BsYXlcIiwgXCJub25lXCIpLCAkKHRoaXMuX3BvcHVwKS5maW5kKFwiLk1hZFN0YXR1c1NwaW5uZXJcIikuY3NzKFwidmlzaWJpbGl0eVwiLCBuID09PSAzIHx8IG4gPT09IDQgfHwgbiA9PT0gNSA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIilcbiAgICB9LFxuICAgIF9vbkdhbWVFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVN0YXR1cyg0KVxuICAgIH0sXG4gICAgX3N0YXJ0VXBkYXRlUG9sbGluZzogZnVuY3Rpb24obikge1xuICAgICAgICB2YXIgdCwgaTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChSb2Jsb3hMYXVuY2guc3RhdGUgPSBSb2Jsb3hMYXVuY2hTdGF0ZXMuVXBncmFkaW5nLCB0ID0gUm9ibG94LkNsaWVudC5DcmVhdGVMYXVuY2hlcighMCksIGkgPSB3aW5kb3cuQWN0aXZlWE9iamVjdCA/IHQuSXNVcFRvRGF0ZSA6IHQuR2V0X0lzVXBUb0RhdGUoKSwgaSB8fCBpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0LlByZVN0YXJ0R2FtZSgpXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICBSb2Jsb3guQ2xpZW50LlJlbGVhc2VMYXVuY2hlcih0LCAhMCwgITEpLCBSb2Jsb3hMYXVuY2guc3RhdGUgPSBSb2Jsb3hMYXVuY2hTdGF0ZXMuU3RhcnRpbmdTZXJ2ZXIsIG4oKTtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmID0gZnVuY3Rpb24odCwgaSwgcikge1xuICAgICAgICAgICAgICAgICAgICByLl9vblVwZGF0ZVN0YXR1cyh0LCBpLCBuKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdSA9IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdC5fb25VcGRhdGVFcnJvcihuKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgciA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLkNoZWNrVXBkYXRlU3RhdHVzKGYsIHUsIHQsIG4sIHIpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIFJvYmxveC5DbGllbnQuUmVsZWFzZUxhdW5jaGVyKHQsICEwLCAhMSksIG4oKVxuICAgICAgICB9XG4gICAgfSxcbiAgICBfb25VcGRhdGVTdGF0dXM6IGZ1bmN0aW9uKG4sIHQsIGkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jYW5jZWxsZWQpXG4gICAgICAgICAgICBpZiAodGhpcy5fdXBkYXRlU3RhdHVzKG4pLCBuID09PSA4KSBSb2Jsb3guQ2xpZW50LlJlbGVhc2VMYXVuY2hlcih0LCAhMCwgITApLCBSb2Jsb3guQ2xpZW50LlJlZnJlc2goKSwgUm9ibG94TGF1bmNoLnN0YXRlID0gUm9ibG94TGF1bmNoU3RhdGVzLlN0YXJ0aW5nU2VydmVyLCBpKCk7XG4gICAgICAgICAgICBlbHNlIGlmIChuID09PSA3KSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZ1bmN0aW9uKG4sIHQsIHIpIHtcbiAgICAgICAgICAgICAgICAgICAgci5fb25VcGRhdGVTdGF0dXMobiwgdCwgaSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGUgPSBmdW5jdGlvbihuLCB0KSB7XG4gICAgICAgICAgICAgICAgICAgIHQuX29uVXBkYXRlRXJyb3IobilcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHIgPSB0aGlzLFxuICAgICAgICAgICAgICAgIHUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgci5DaGVja1VwZGF0ZVN0YXR1cyhmLCBlLCB0LCBpLCByKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCh1LCAyZTMpXG4gICAgICAgIH0gZWxzZSBhbGVydChcIlVua25vd24gc3RhdHVzIGZyb20gQ2hlY2tVcGRhdGVTdGF0dXNcIilcbiAgICB9LFxuICAgIF9vblVwZGF0ZUVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlU3RhdHVzKDIpXG4gICAgfSxcbiAgICBDaGVja1VwZGF0ZVN0YXR1czogZnVuY3Rpb24obiwgdCwgaSwgciwgdSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGkuUHJlU3RhcnRHYW1lKCksIHdpbmRvdy5BY3RpdmVYT2JqZWN0KSB2YXIgZiA9IGkuSXNVcFRvRGF0ZTtcbiAgICAgICAgICAgIGVsc2UgZiA9IGkuR2V0X0lzVXBUb0RhdGUoKTtcbiAgICAgICAgICAgIGYgfHwgZiA9PT0gdW5kZWZpbmVkID8gbig4LCBpLCB1KSA6IG4oNywgaSwgdSlcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbig4LCBpLCB1KVxuICAgICAgICB9XG4gICAgfSxcbiAgICBSZXF1ZXN0R2FtZTogZnVuY3Rpb24obiwgdCkge1xuICAgICAgICB2YXIgcjtcbiAgICAgICAgdGhpcy5fc2hvd0RpYWxvZygpO1xuICAgICAgICB2YXIgZiA9IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICAgICAgICAgICAgICB0Ll9vbkdhbWVTdGF0dXMobilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1ID0gZnVuY3Rpb24obiwgdCkge1xuICAgICAgICAgICAgICAgIHQuX29uR2FtZUVycm9yKG4pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZSA9IHRoaXMsXG4gICAgICAgICAgICBpID0gITE7XG4gICAgICAgIHJldHVybiB0eXBlb2YgUGFydHkgIT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgUGFydHkuQW1JTGVhZGVyID09IFwiZnVuY3Rpb25cIiAmJiAoaSA9IFBhcnR5LkFtSUxlYWRlcigpKSwgciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgUm9ibG94UGxhY2VMYXVuY2hlclNlcnZpY2UuUmVxdWVzdEdhbWUobiwgaSwgdCwgZiwgdSwgZSlcbiAgICAgICAgfSwgdGhpcy5fc3RhcnRVcGRhdGVQb2xsaW5nKHIpLCAhMVxuICAgIH0sXG4gICAgUmVxdWVzdFBsYXlXaXRoUGFydHk6IGZ1bmN0aW9uKG4sIHQsIGkpIHtcbiAgICAgICAgdGhpcy5fc2hvd0RpYWxvZygpO1xuICAgICAgICB2YXIgZiA9IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICAgICAgICAgICAgICB0Ll9vbkdhbWVTdGF0dXMobilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlID0gZnVuY3Rpb24obiwgdCkge1xuICAgICAgICAgICAgICAgIHQuX29uR2FtZUVycm9yKG4pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgciA9IHRoaXMsXG4gICAgICAgICAgICB1ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgUm9ibG94UGxhY2VMYXVuY2hlclNlcnZpY2UuUmVxdWVzdFBsYXlXaXRoUGFydHkobiwgdCwgaSwgZiwgZSwgcilcbiAgICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydFVwZGF0ZVBvbGxpbmcodSksICExXG4gICAgfSxcbiAgICBSZXF1ZXN0R3JvdXBCdWlsZEdhbWU6IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy5fc2hvd0RpYWxvZygpO1xuICAgICAgICB2YXIgciA9IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICAgICAgICAgICAgICB0Ll9vbkdhbWVTdGF0dXMobiwgITApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdSA9IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICAgICAgICAgICAgICB0Ll9vbkdhbWVFcnJvcihuKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHQgPSB0aGlzLFxuICAgICAgICAgICAgaSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIFJvYmxveFBsYWNlTGF1bmNoZXJTZXJ2aWNlLlJlcXVlc3RHcm91cEJ1aWxkR2FtZShuLCByLCB1LCB0KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0VXBkYXRlUG9sbGluZyhpKSwgITFcbiAgICB9LFxuICAgIFJlcXVlc3RGb2xsb3dVc2VyOiBmdW5jdGlvbihuKSB7XG4gICAgICAgIHRoaXMuX3Nob3dEaWFsb2coKTtcbiAgICAgICAgdmFyIHIgPSBmdW5jdGlvbihuLCB0KSB7XG4gICAgICAgICAgICAgICAgdC5fb25HYW1lU3RhdHVzKG4pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdSA9IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICAgICAgICAgICAgICB0Ll9vbkVycm9yKG4pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdCA9IHRoaXMsXG4gICAgICAgICAgICBpID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgUm9ibG94UGxhY2VMYXVuY2hlclNlcnZpY2UuUmVxdWVzdEZvbGxvd1VzZXIobiwgciwgdSwgdClcbiAgICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydFVwZGF0ZVBvbGxpbmcoaSksICExXG4gICAgfSxcbiAgICBSZXF1ZXN0R2FtZUpvYjogZnVuY3Rpb24obiwgdCwgaSkge1xuICAgICAgICB0aGlzLl9zaG93RGlhbG9nKCk7XG4gICAgICAgIHZhciBmID0gZnVuY3Rpb24obiwgdCkge1xuICAgICAgICAgICAgICAgIHQuX29uR2FtZVN0YXR1cyhuKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGUgPSBmdW5jdGlvbihuLCB0KSB7XG4gICAgICAgICAgICAgICAgdC5fb25HYW1lRXJyb3IobilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByID0gdGhpcyxcbiAgICAgICAgICAgIHUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBSb2Jsb3hQbGFjZUxhdW5jaGVyU2VydmljZS5SZXF1ZXN0R2FtZUpvYihuLCB0LCBpLCBmLCBlLCByKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0VXBkYXRlUG9sbGluZyh1KSwgITFcbiAgICB9LFxuICAgIENhbmNlbExhdW5jaDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYW5jZWxsZWQgPSAhMCwgJC5tb2RhbC5jbG9zZSgpLCAhMVxuICAgIH0sXG4gICAgZGlzcG9zZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIFJCWC5QbGFjZUxhdW5jaGVyLmNhbGxCYXNlTWV0aG9kKHRoaXMsIFwiZGlzcG9zZVwiKVxuICAgIH1cbn07XG5cbjsgLy8vIFZpZGVvUHJlUm9sbC5qc1xuZnVuY3Rpb24gb3BlblZpZGVvUHJlcm9sbDIobikge1xuICAgIFJvYmxveC5WaWRlb1ByZVJvbGwudGVzdChuKVxufVxuXG5mdW5jdGlvbiBmbGFzaENoZWNrKG4pIHtcbiAgICB2YXIgaSA9ICExLFxuICAgICAgICB0LCByO1xuICAgIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkgdHJ5IHtcbiAgICAgICAgdCA9IG5ldyBBY3RpdmVYT2JqZWN0KFwiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2guXCIgKyBuKSwgaSA9ICEwXG4gICAgfSBjYXRjaCAodSkge30gZWxzZSBuYXZpZ2F0b3IucGx1Z2lucyAmJiBuYXZpZ2F0b3IubWltZVR5cGVzLmxlbmd0aCA+IDAgJiYgKHQgPSBuYXZpZ2F0b3IucGx1Z2luc1tcIlNob2Nrd2F2ZSBGbGFzaFwiXSwgdCAmJiAociA9IG5hdmlnYXRvci5wbHVnaW5zW1wiU2hvY2t3YXZlIEZsYXNoXCJdLmRlc2NyaXB0aW9uLnJlcGxhY2UoLy4qXFxzKFxcZCtcXC5cXGQrKS4qLywgXCIkMVwiKSwgciA+PSBuICYmIChpID0gITApKSk7XG4gICAgcmV0dXJuIGlcbn1cbnR5cGVvZiBSb2Jsb3ggPT0gXCJ1bmRlZmluZWRcIiAmJiAoUm9ibG94ID0ge30pLCBSb2Jsb3guVmlkZW9QcmVSb2xsID0ge1xuICAgIG5ld1ZhbHVlOiBcIlwiLFxuICAgIHNob3dWaWRlb1ByZVJvbGw6ICExLFxuICAgIHZpZGVvSW5pdGlhbGl6ZWQ6ICExLFxuICAgIHZpZGVvU3RhcnRlZDogITEsXG4gICAgdmlkZW9Db21wbGV0ZWQ6ICExLFxuICAgIHZpZGVvU2tpcHBlZDogITEsXG4gICAgdmlkZW9DYW5jZWxsZWQ6ICExLFxuICAgIHZpZGVvRXJyb3JlZDogITEsXG4gICAgdmlkZW9PcHRpb25zOiB7XG4gICAgICAgIGtleTogXCJpbnRlZ3JhdGlvbl90ZXN0XCIsXG4gICAgICAgIGNvbXBhbmlvbklkOiBcInZpZGVvUHJlcm9sbENvbXBhbmlvbkFkXCJcbiAgICB9LFxuICAgIG15dnBhaWRhZDogbnVsbCxcbiAgICBsb2FkaW5nQmFyTWF4VGltZTogM2U0LFxuICAgIGxvYWRpbmdCYXJDdXJyZW50VGltZTogMCxcbiAgICBsb2FkaW5nQmFySW50ZXJ2YWxJRDogMCxcbiAgICBsb2FkaW5nQmFySUQ6IFwidmlkZW9QcmVyb2xsTG9hZGluZ0JhclwiLFxuICAgIGxvYWRpbmdCYXJJbm5lcklEOiBcInZpZGVvUHJlcm9sbExvYWRpbmdCYXJDb21wbGV0ZWRcIixcbiAgICBsb2FkaW5nQmFyUGVyY2VudGFnZUlEOiBcInZpZGVvUHJlcm9sbExvYWRpbmdQZXJjZW50XCIsXG4gICAgdmlkZW9Mb2FkaW5nVGltZW91dDogN2UzLFxuICAgIHZpZGVvUGxheWluZ1RpbWVvdXQ6IDIzZTMsXG4gICAgdmlkZW9Mb2dOb3RlOiBcIlwiLFxuICAgIGxvZ3NFbmFibGVkOiAhMSxcbiAgICBleGNsdWRlZFBsYWNlSWRzOiBcIlwiLFxuICAgIHNwZWNpZmljQWRPblBsYWNlUGFnZUVuYWJsZWQ6ICExLFxuICAgIHNwZWNpZmljQWRPblBsYWNlUGFnZUlkOiAwLFxuICAgIHNwZWNpZmljQWRPblBsYWNlUGFnZUNhdGVnb3J5OiBcIlwiLFxuICAgIGNoZWNrRWxpZ2liaWxpdHk6IGZ1bmN0aW9uKCkge1xuICAgICAgICBSb2Jsb3guVmlkZW9QcmVSb2xsLnNob3dWaWRlb1ByZVJvbGwgJiYgKGZsYXNoQ2hlY2soOCkgPyB0eXBlb2YgX19hZGFwdHZfXyA9PSBcInVuZGVmaW5lZFwiID8gKFJvYmxveC5WaWRlb1ByZVJvbGwudmlkZW9Mb2dOb3RlID0gXCJOb0FkYXBUdlwiLCBSb2Jsb3guVmlkZW9QcmVSb2xsLnNob3dWaWRlb1ByZVJvbGwgPSAhMSkgOiBSb2Jsb3guQ2xpZW50LklzUm9ibG94SW5zdGFsbGVkKCkgPyBSb2Jsb3guQ2xpZW50LmlzSURFKCkgPyAoUm9ibG94LlZpZGVvUHJlUm9sbC52aWRlb0xvZ05vdGUgPSBcIlJvYmxveFN0dWRpb1wiLCBSb2Jsb3guVmlkZW9QcmVSb2xsLnNob3dWaWRlb1ByZVJvbGwgPSAhMSkgOiBSb2Jsb3guQ2xpZW50LmlzUm9ibG94QnJvd3NlcigpID8gKFJvYmxveC5WaWRlb1ByZVJvbGwudmlkZW9Mb2dOb3RlID0gXCJSb2Jsb3hQbGF5ZXJcIiwgUm9ibG94LlZpZGVvUHJlUm9sbC5zaG93VmlkZW9QcmVSb2xsID0gITEpIDogd2luZG93LmNocm9tZSAmJiB3aW5kb3cubG9jYXRpb24uaGFzaCA9PSBcIiNjaHJvbWVJbnN0YWxsXCIgJiYgKFJvYmxveC5WaWRlb1ByZVJvbGwuc2hvd1ZpZGVvUHJlUm9sbCA9ICExKSA6IFJvYmxveC5WaWRlb1ByZVJvbGwuc2hvd1ZpZGVvUHJlUm9sbCA9ICExIDogKFJvYmxveC5WaWRlb1ByZVJvbGwudmlkZW9Mb2dOb3RlID0gXCJOb0ZsYXNoXCIsIFJvYmxveC5WaWRlb1ByZVJvbGwuc2hvd1ZpZGVvUHJlUm9sbCA9ICExKSlcbiAgICB9LFxuICAgIGlzRXhjbHVkZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdCwgbjtcbiAgICAgICAgaWYgKFJvYmxveC5WaWRlb1ByZVJvbGwuc2hvd1ZpZGVvUHJlUm9sbCAmJiBSb2Jsb3guVmlkZW9QcmVSb2xsLmV4Y2x1ZGVkUGxhY2VJZHMgIT09IFwiXCIgJiYgKHQgPSBSb2Jsb3guVmlkZW9QcmVSb2xsLmV4Y2x1ZGVkUGxhY2VJZHMuc3BsaXQoXCIsXCIpLCB0eXBlb2YgcGxheV9wbGFjZUlkICE9IFwidW5kZWZpbmVkXCIpKVxuICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IHQubGVuZ3RoOyBuKyspXG4gICAgICAgICAgICAgICAgaWYgKHBsYXlfcGxhY2VJZCA9PSB0W25dKSByZXR1cm4gUm9ibG94LlZpZGVvUHJlUm9sbC52aWRlb0xvZ05vdGUgPSBcIkV4Y2x1ZGVkUGxhY2VcIiwgITA7XG4gICAgICAgIHJldHVybiAhMVxuICAgIH0sXG4gICAgc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaSwgciwgdCwgbjtcbiAgICAgICAgdGhpcy52aWRlb0luaXRpYWxpemVkID0gITAsIHRoaXMudmlkZW9TdGFydGVkID0gITEsIHRoaXMudmlkZW9DYW5jZWxsZWQgPSAhMSwgdGhpcy52aWRlb0NvbXBsZXRlZCA9ICExLCB0aGlzLnZpZGVvU2tpcHBlZCA9ICExLCB0aGlzLmxvYWRpbmdCYXJDdXJyZW50VGltZSA9IDAsIHRoaXMudmlkZW9Mb2dOb3RlID0gXCJcIiwgUm9ibG94LlZpZGVvUHJlUm9sbC5zcGVjaWZpY0FkT25QbGFjZVBhZ2VFbmFibGVkICYmIHR5cGVvZiBwbGF5X3BsYWNlSWQgIT0gXCJ1bmRlZmluZWRcIiAmJiAoaSA9IFwiLFwiICsgUm9ibG94LlZpZGVvUHJlUm9sbC5zcGVjaWZpY0FkT25QbGFjZVBhZ2VDYXRlZ29yeSwgcGxheV9wbGFjZUlkID09IFJvYmxveC5WaWRlb1ByZVJvbGwuc3BlY2lmaWNBZE9uUGxhY2VQYWdlSWQgJiYgUm9ibG94LlZpZGVvUHJlUm9sbC52aWRlb09wdGlvbnMuY2F0ZWdvcmllcy5pbmRleE9mKGkpID09IC0xICYmIChSb2Jsb3guVmlkZW9QcmVSb2xsLnZpZGVvT3B0aW9ucy5jYXRlZ29yaWVzICs9IGkpKSwgciA9IF9fYWRhcHR2X18sIHRoaXMubXl2cGFpZGFkID0gbmV3IHIuYWRzLnZwYWlkLlZQQUlEQWQoXCJ2aWRlb1ByZXJvbGxNYWluRGl2XCIpLCB0ID0gMWUzLCBMb2FkaW5nQmFyLmluaXQodGhpcy5sb2FkaW5nQmFySUQsIHRoaXMubG9hZGluZ0JhcklubmVySUQsIHRoaXMubG9hZGluZ0JhclBlcmNlbnRhZ2VJRCksIHRoaXMubG9hZGluZ0JhckludGVydmFsSUQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIFJvYmxveC5WaWRlb1ByZVJvbGwubG9hZGluZ0JhckN1cnJlbnRUaW1lICs9IHQsIExvYWRpbmdCYXIudXBkYXRlKFJvYmxveC5WaWRlb1ByZVJvbGwubG9hZGluZ0JhcklELCBSb2Jsb3guVmlkZW9QcmVSb2xsLmxvYWRpbmdCYXJDdXJyZW50VGltZSAvIFJvYmxveC5WaWRlb1ByZVJvbGwubG9hZGluZ0Jhck1heFRpbWUpXG4gICAgICAgIH0sIHQpLCBuID0gci5hZHMudnBhaWQuVlBBSURFdmVudDtcbiAgICAgICAgdGhpcy5teXZwYWlkYWQub24obi5BZExvYWRlZCwgZnVuY3Rpb24obikge1xuICAgICAgICAgICAgUm9ibG94LlZpZGVvUHJlUm9sbC5fb25WaWRlb0xvYWRlZChuKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5teXZwYWlkYWQub24obi5BZFN0YXJ0ZWQsIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgIFJvYmxveC5WaWRlb1ByZVJvbGwuX29uVmlkZW9TdGFydChuKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5teXZwYWlkYWQub24obi5BZFN0b3BwZWQsIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgIFJvYmxveC5WaWRlb1ByZVJvbGwuX29uVmlkZW9Db21wbGV0ZShuKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5teXZwYWlkYWQub24obi5BZEVycm9yLCBmdW5jdGlvbihuKSB7XG4gICAgICAgICAgICBSb2Jsb3guVmlkZW9QcmVSb2xsLl9vblZpZGVvRXJyb3IobilcbiAgICAgICAgfSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLm15dnBhaWRhZC5pbml0QWQoMzkxLCAzMTIsIHRoaXMudmlkZW9PcHRpb25zKVxuICAgICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgICAgICBmKClcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjbGVhckludGVydmFsKGxvYWRpbmdCYXJJbnRlcnZhbClcbiAgICB9LFxuICAgIGNhbmNlbDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMudmlkZW9DYW5jZWxsZWQgPSAhMCwgJC5tb2RhbC5jbG9zZSgpXG4gICAgfSxcbiAgICBza2lwOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy52aWRlb0NvbXBsZXRlZCA9ICEwLCB0aGlzLnZpZGVvU2tpcHBlZCA9ICEwLCB0aGlzLnNob3dWaWRlb1ByZVJvbGwgPSAhMVxuICAgIH0sXG4gICAgY2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICBNYWRTdGF0dXMucnVubmluZyAmJiBNYWRTdGF0dXMuc3RvcChcIlwiKSwgUm9ibG94TGF1bmNoLmxhdW5jaGVyICYmIChSb2Jsb3hMYXVuY2gubGF1bmNoZXIuX2NhbmNlbGxlZCA9ICEwKSwgY2xlYXJJbnRlcnZhbCh0aGlzLmxvYWRpbmdCYXJJbnRlcnZhbElEKSwgTG9hZGluZ0Jhci5kaXNwb3NlKHRoaXMubG9hZGluZ0JhcklEKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubXl2cGFpZGFkLnN0b3BBZCgpXG4gICAgICAgIH0gY2F0Y2ggKG4pIHt9XG4gICAgICAgIHRoaXMuaXNQbGF5aW5nKCkgJiYgKHRoaXMudmlkZW9DYW5jZWxsZWQgPSAhMCksICQubW9kYWwuY2xvc2UoKSwgdGhpcy5sb2dWaWRlb1ByZVJvbGwoKVxuICAgIH0sXG4gICAgX29uVmlkZW9FcnJvcjogZnVuY3Rpb24gZigpIHtcbiAgICAgICAgdGhpcy52aWRlb0NvbXBsZXRlZCA9ICEwLCB0aGlzLnZpZGVvRXJyb3JlZCA9ICEwXG4gICAgfSxcbiAgICBfb25WaWRlb0xvYWRlZDogZnVuY3Rpb24obikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5teXZwYWlkYWQuc3RhcnRBZCgpXG4gICAgICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgICAgICAgIGYobilcbiAgICAgICAgfVxuICAgIH0sXG4gICAgX29uVmlkZW9TdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMudmlkZW9TdGFydGVkID0gITBcbiAgICB9LFxuICAgIF9vblZpZGVvQ29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnZpZGVvU3RhcnRlZCAmJiB0aGlzLnZpZGVvQ2FuY2VsbGVkID09ICExICYmICh0aGlzLnZpZGVvQ29tcGxldGVkID0gITAsIHRoaXMuc2hvd1ZpZGVvUHJlUm9sbCA9ICExLCB0aGlzLm5ld1ZhbHVlICE9IFwiXCIgJiYgJC5jb29raWUoXCJSQlhWUFJcIiwgdGhpcy5uZXdWYWx1ZSwgMTgwKSlcbiAgICB9LFxuICAgIGxvZ1ZpZGVvUHJlUm9sbDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChSb2Jsb3guVmlkZW9QcmVSb2xsLmxvZ3NFbmFibGVkKSB7XG4gICAgICAgICAgICB2YXIgbiA9IFwiXCI7XG4gICAgICAgICAgICBpZiAoUm9ibG94LlZpZGVvUHJlUm9sbC52aWRlb0NvbXBsZXRlZCkgbiA9IFwiQ29tcGxldGVcIiwgUm9ibG94LlZpZGVvUHJlUm9sbC52aWRlb0xvZ05vdGUgPT0gXCJcIiAmJiAoUm9ibG94LlZpZGVvUHJlUm9sbC52aWRlb0xvZ05vdGUgPSBcIk5vVGltZW91dFwiKSwgUm9ibG94LlZpZGVvUHJlUm9sbC5sb2dzRW5hYmxlZCA9ICExO1xuICAgICAgICAgICAgZWxzZSBpZiAoUm9ibG94LlZpZGVvUHJlUm9sbC52aWRlb0NhbmNlbGxlZCkgbiA9IFwiQ2FuY2VsbGVkXCIsIFJvYmxveC5WaWRlb1ByZVJvbGwudmlkZW9Mb2dOb3RlID0gUm9ibG94TGF1bmNoLnN0YXRlO1xuICAgICAgICAgICAgZWxzZSBpZiAoUm9ibG94LlZpZGVvUHJlUm9sbC52aWRlb0luaXRpYWxpemVkID09ICExICYmIFJvYmxveC5WaWRlb1ByZVJvbGwudmlkZW9Mb2dOb3RlICE9IFwiXCIpIG4gPSBcIkZhaWxlZFwiLCBSb2Jsb3guVmlkZW9QcmVSb2xsLmxvZ3NFbmFibGVkID0gITE7XG4gICAgICAgICAgICBlbHNlIHJldHVybjtcbiAgICAgICAgICAgIEdvb2dsZUFuYWx5dGljc0V2ZW50cy5GaXJlRXZlbnQoW1wiUHJlUm9sbFwiLCBuLCBSb2Jsb3guVmlkZW9QcmVSb2xsLnZpZGVvTG9nTm90ZV0pXG4gICAgICAgIH1cbiAgICB9LFxuICAgIGlzUGxheWluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSb2Jsb3guVmlkZW9QcmVSb2xsLnZpZGVvSW5pdGlhbGl6ZWQgPyAoUm9ibG94LlZpZGVvUHJlUm9sbC52aWRlb0luaXRpYWxpemVkICYmICFSb2Jsb3guVmlkZW9QcmVSb2xsLnZpZGVvU3RhcnRlZCAmJiBSb2Jsb3guVmlkZW9QcmVSb2xsLmxvYWRpbmdCYXJDdXJyZW50VGltZSA+IFJvYmxveC5WaWRlb1ByZVJvbGwudmlkZW9Mb2FkaW5nVGltZW91dCAmJiAoUm9ibG94LlZpZGVvUHJlUm9sbC52aWRlb0NvbXBsZXRlZCA9ICEwLCBSb2Jsb3guVmlkZW9QcmVSb2xsLnZpZGVvTG9nTm90ZSA9IFwiTG9hZGluZ1RpbWVvdXRcIiksIFJvYmxveC5WaWRlb1ByZVJvbGwudmlkZW9TdGFydGVkICYmICFSb2Jsb3guVmlkZW9QcmVSb2xsLnZpZGVvQ29tcGxldGVkICYmIFJvYmxveC5WaWRlb1ByZVJvbGwubG9hZGluZ0JhckN1cnJlbnRUaW1lID4gUm9ibG94LlZpZGVvUHJlUm9sbC52aWRlb1BsYXlpbmdUaW1lb3V0ICYmIChSb2Jsb3guVmlkZW9QcmVSb2xsLnZpZGVvQ29tcGxldGVkID0gITAsIFJvYmxveC5WaWRlb1ByZVJvbGwudmlkZW9Mb2dOb3RlID0gXCJQbGF5aW5nVGltZW91dFwiKSwgIVJvYmxveC5WaWRlb1ByZVJvbGwudmlkZW9Db21wbGV0ZWQpIDogITFcbiAgICB9LFxuICAgIGNvcnJlY3RJRU1vZGFsUG9zaXRpb246IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgaWYgKG4uY29udGFpbmVyLmlubmVySGVpZ2h0KCkgPD0gMzApIHtcbiAgICAgICAgICAgIHZhciBpID0gJChcIiN2aWRlb1ByZXJvbGxQYW5lbFwiKSxcbiAgICAgICAgICAgICAgICB0ID0gLU1hdGguZmxvb3IoaS5pbm5lckhlaWdodCgpIC8gMik7XG4gICAgICAgICAgICBpLmNzcyh7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgICAgICAgICAgICAgICB0b3A6IHQgKyBcInB4XCJcbiAgICAgICAgICAgIH0pLCBuLmNvbnRhaW5lci5maW5kKFwiLlZwckNsb3NlQnV0dG9uXCIpLmNzcyh7XG4gICAgICAgICAgICAgICAgdG9wOiB0IC0gMTAgKyBcInB4XCIsXG4gICAgICAgICAgICAgICAgXCJ6LWluZGV4XCI6IFwiMTAwM1wiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfSxcbiAgICB0ZXN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgX3BvcHVwT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGVzY0Nsb3NlOiAhMCxcbiAgICAgICAgICAgIG9wYWNpdHk6IDgwLFxuICAgICAgICAgICAgb3ZlcmxheUNzczoge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMDAwXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblNob3c6IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgICAgICBSb2Jsb3guVmlkZW9QcmVSb2xsLmNvcnJlY3RJRU1vZGFsUG9zaXRpb24obiksIFJvYmxveC5WaWRlb1ByZVJvbGwuc3RhcnQoKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIFJvYmxveC5WaWRlb1ByZVJvbGwuY2xvc2UoKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsb3NlSFRNTDogJzxhIGhyZWY9XCIjXCIgY2xhc3M9XCJJbWFnZUJ1dHRvbiBjbG9zZUJ0bkNpcmNsZV8zNWggQUJDbG9zZUNpcmNsZSBWcHJDbG9zZUJ1dHRvblwiPjwvYT4nXG4gICAgICAgIH0sICQoXCIjdmlkZW9QcmVyb2xsUGFuZWxcIikubW9kYWwoX3BvcHVwT3B0aW9ucyksIE1hZFN0YXR1cy5ydW5uaW5nIHx8IChNYWRTdGF0dXMuaW5pdCgkKFwiI3ZpZGVvUHJlcm9sbFBhbmVsXCIpLmZpbmQoXCIuTWFkU3RhdHVzRmllbGRcIiksICQoXCIjdmlkZW9QcmVyb2xsUGFuZWxcIikuZmluZChcIi5NYWRTdGF0dXNCYWNrQnVmZmVyXCIpLCAyZTMsIDgwMCksIE1hZFN0YXR1cy5zdGFydCgpKSwgJChcIiN2aWRlb1ByZXJvbGxQYW5lbFwiKS5maW5kKFwiLk1hZFN0YXR1c1N0YXJ0aW5nXCIpLmNzcyhcImRpc3BsYXlcIiwgXCJub25lXCIpLCAkKFwiI3ZpZGVvUHJlcm9sbFBhbmVsXCIpLmZpbmQoXCIuTWFkU3RhdHVzU3Bpbm5lclwiKS5jc3MoXCJ2aXNpYmlsaXR5XCIsIHN0YXR1cyA9PT0gMyB8fCBzdGF0dXMgPT09IDQgfHwgc3RhdHVzID09PSA1ID8gXCJoaWRkZW5cIiA6IFwidmlzaWJsZVwiKVxuICAgIH1cbn07XG52YXIgTG9hZGluZ0JhciA9IHtcbiAgICBiYXJzOiBbXSxcbiAgICBpbml0OiBmdW5jdGlvbihuLCB0LCBpLCByKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5nZXQobik7XG4gICAgICAgIHUgPT0gbnVsbCAmJiAodSA9IHt9KSwgdS5iYXJJRCA9IG4sIHUuaW5uZXJCYXJJRCA9IHQsIHUucGVyY2VudGFnZUlEID0gaSwgdHlwZW9mIHIgPT0gXCJ1bmRlZmluZWRcIiAmJiAodS5wZXJjZW50Q29tcGxldGUgPSAwKSwgdGhpcy5iYXJzLnB1c2godSksIHRoaXMudXBkYXRlKG4sIHUucGVyY2VudENvbXBsZXRlKVxuICAgIH0sXG4gICAgZ2V0OiBmdW5jdGlvbihuKSB7XG4gICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgdGhpcy5iYXJzLmxlbmd0aDsgdCsrKVxuICAgICAgICAgICAgaWYgKHRoaXMuYmFyc1t0XS5iYXJJRCA9PSBuKSByZXR1cm4gdGhpcy5iYXJzW3RdO1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG4gICAgZGlzcG9zZTogZnVuY3Rpb24obikge1xuICAgICAgICBmb3IgKHZhciB0ID0gMDsgdCA8IHRoaXMuYmFycy5sZW5ndGg7IHQrKykgdGhpcy5iYXJzW3RdLmJhcklEID09IG4gJiYgdGhpcy5iYXJzLnNwbGljZSh0LCAxKVxuICAgIH0sXG4gICAgdXBkYXRlOiBmdW5jdGlvbihuLCB0KSB7XG4gICAgICAgIHZhciBpID0gdGhpcy5nZXQobiksXG4gICAgICAgICAgICB1LCByO1xuICAgICAgICBpICYmICh0ID4gMSAmJiAodCA9IDEpLCB1ID0gJChcIiNcIiArIG4pLndpZHRoKCksIHIgPSBNYXRoLnJvdW5kKHUgKiB0KSwgJChcIiNcIiArIGkuaW5uZXJCYXJJRCkuYW5pbWF0ZSh7XG4gICAgICAgICAgICB3aWR0aDogclxuICAgICAgICB9LCAyMDAsIFwic3dpbmdcIiksIGkucGVyY2VudGFnZUlEICYmICQoXCIjXCIgKyBpLnBlcmNlbnRhZ2VJRCkubGVuZ3RoID4gMCAmJiAkKFwiI1wiICsgaS5wZXJjZW50YWdlSUQpLmh0bWwoTWF0aC5yb3VuZCh0ICogMTAwKSArIFwiJVwiKSwgaS5wZXJjZW50Q29tcGxldGUgPSB0KVxuICAgIH1cbn07XG4vLyBlbmQgcm9ibG94LmpzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/app.js\n"); + +/***/ }), + +/***/ "./resources/sass/app.scss": +/*!*********************************!*\ + !*** ./resources/sass/app.scss ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvc2Fzcy9hcHAuc2Nzcz80NzVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSIsImZpbGUiOiIuL3Jlc291cmNlcy9zYXNzL2FwcC5zY3NzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/sass/app.scss\n"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var [chunkIds, fn, priority] = deferred[i]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ result = fn(); +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "/js/app": 0, +/******/ "css/app": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkIds[i]] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module depends on other loaded chunks and execution need to be delayed +/******/ __webpack_require__.O(undefined, ["css/app"], () => (__webpack_require__("./resources/js/app.js"))) +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["css/app"], () => (__webpack_require__("./resources/sass/app.scss"))) +/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/public/js/servers.js b/public/js/servers.js new file mode 100644 index 0000000..0497a6e --- /dev/null +++ b/public/js/servers.js @@ -0,0 +1,25 @@ +function joinServer(id) +{ + var button = document.getElementById('join-server-' + id); + $(button).removeClass("btn-success"); + $(button).addClass("btn-secondary"); + button.setAttribute("disabled", "disabled"); + button.innerHTML = " Joining..."; + $.get("/client/generate/" + id, function(data, status) + { + if (status == "success") + { + open("tadahlauncher:" + data, "_self") + } + else + { + alert("Failed to generate token. Try again later."); + } + }); + setTimeout(function() + { + $(button).removeClass("btn-secondary"); + $(button).addClass("btn-success"); + button.innerHTML = " Play"; + }, 5000); +} \ No newline at end of file diff --git a/public/mix-manifest.json b/public/mix-manifest.json new file mode 100644 index 0000000..2d60117 --- /dev/null +++ b/public/mix-manifest.json @@ -0,0 +1,4 @@ +{ + "/js/app.js": "/js/app.js", + "/css/app.css": "/css/app.css" +} diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..eb05362 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/public/web.config b/public/web.config new file mode 100644 index 0000000..323482f --- /dev/null +++ b/public/web.config @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/css/app.css b/resources/css/app.css new file mode 100644 index 0000000..e69de29 diff --git a/resources/js/app.js b/resources/js/app.js new file mode 100644 index 0000000..0e9b7a4 --- /dev/null +++ b/resources/js/app.js @@ -0,0 +1,2097 @@ +//require('./bootstrap'); + +; /// files: roblox.js, jquery.json-2.2.js, jquery.simplemodal-1.3.5.js, jquery.tipsy.js, AjaxAvatarThumbnail.js, extensions/string.js, StringTruncator.min.js, json2.min.js, webkit.js, GoogleAnalytics/GoogleAnalyticsEvents.js, MasterPageUI.js, jquery.cookie.js, jquery.jsoncookie.js, XsrfToken.js, RobloxEventManager.js, RobloxEventListener.js, KontagentEventListener.js, GoogleEventListener.js, MongoEventListener.js, SearchVisionListener.js, SiteTouchEvent.js, JSErrorTracker.js, Studio2Alert.js, ClientInstaller.js, InstallationInstructions.js, MadStatus.js, PlaceLauncher.js, VideoPreRoll.js + +; /// roblox.js +(function(n, t) { + function p(n, i) { + var r = i.split("."); + for (i = r.shift(); r.length > 0; n = n[i], i = r.shift()) + if (n[i] === t) return t; + return n[i] + } + + function k(n, i, r) { + var u = i.split("."); + for (i = u.shift(); u.length > 0; n = n[i], i = u.shift()) n[i] === t && (n[i] = {}); + n[i] = r + } + + function nt(n, t) { + var i = f.createElement("link"); + i.href = n, i.rel = "stylesheet", i.type = "text/css", u.parentNode.insertBefore(i, u), t() + } + + function g(n, t) { + var i = f.createElement("script"); + i.type = "text/javascript", i.src = n, i.onload = i.onreadystatechange = function() { + i.readyState && i.readyState != "loaded" && i.readyState != "complete" || (t(), i.onload = i.onreadystatechange = null) + }, u.parentNode.insertBefore(i, u) + } + + function d(n) { + return n.split(".").pop().split("?").shift() + } + + function o(n) { + return n.indexOf(".js") < 0 ? n : n.indexOf(r.modulePath) >= 0 ? n.split(r.modulePath).pop().split(".js").shift().replace("/", ".") : n + } + + function v(n) { + var t, i; + return t = n.indexOf(".js") >= 0 || n.indexOf(".css") >= 0 ? n : r.baseUrl + r.modulePath + n.replace(".", "/") + ".js", i = r.versions[t] || 1, t + "?v=" + i + } + + function s(n) { + for (var r, u = [], i = 0; i < n.length; i++) r = p(Roblox, o(n[i])), r !== t && u.push(r); + return u + } + + function e(n) { + var t = i[n]; + if (t.loaded && t.depsLoaded) + while (t.listeners.length > 0) t.listeners.shift()() + } + + function a(n, u) { + var f, s, h; + if (!b(n) || r.externalResources.toString().indexOf(n) >= 0) return u(); + f = o(n), i[f] === t ? (i[f] = { + loaded: !1, + depsLoaded: !0, + listeners: [] + }, i[f].listeners.push(u), s = v(f), h = d(s) == "css" ? nt : g, h(s, function() { + i[f].loaded = !0, e(f) + })) : (i[f].listeners.push(u), e(f)) + } + + function h(n, t) { + var r = n.shift(), + i = n.length == 0 ? t : function() { + h(n, t) + }; + a(r, i) + } + + function l(n, t) { + c(n) || (n = [n]); + var i = function() { + t.apply(null, s(n)) + }; + h(n.slice(0), i) + } + + function y(n, t, r) { + w(t) ? (r = t, t = []) : c(t) || (t = [t]), i[n] = i[n] || { + loaded: !0, + listeners: [] + }, i[n].depsLoaded = !1, i[n].listeners.unshift(function() { + k(Roblox, n, r.apply(null, s(t))) + }), l(t, function() { + i[n].depsLoaded = !0, e(n) + }) + } + var f = n.document, + u = f.getElementsByTagName("script")[0], + b = function(n) { + return typeof n == "string" + }, + c = function(n) { + return Object.prototype.toString.call(n) == "[object Array]" + }, + w = function(n) { + return Object.prototype.toString.call(n) == "[object Function]" + }, + i = {}, + r = { + baseUrl: "/", + modulePath: "js/modules/", + versions: {}, + externalResources: [] + }; + typeof Roblox == "undefined" && (Roblox = {}), Roblox.config = r, Roblox.require = l, Roblox.define = y +})(window); + +; /// jquery.json-2.2.js +(function(n) { + n.toJSON = function(t) { + var s, o, p, h, f, e, r, v, c, a, u, l, i, y; + if (typeof JSON == "object" && JSON.stringify) return JSON.stringify(t); + if (i = typeof t, t === null) return "null"; + if (i == "undefined") return undefined; + if (i == "number" || i == "boolean") return t + ""; + if (i == "string") return n.quoteString(t); + if (i == "object") { + if (typeof t.toJSON == "function") return n.toJSON(t.toJSON()); + if (t.constructor === Date) return s = t.getUTCMonth() + 1, s < 10 && (s = "0" + s), o = t.getUTCDate(), o < 10 && (o = "0" + o), p = t.getUTCFullYear(), h = t.getUTCHours(), h < 10 && (h = "0" + h), f = t.getUTCMinutes(), f < 10 && (f = "0" + f), e = t.getUTCSeconds(), e < 10 && (e = "0" + e), r = t.getUTCMilliseconds(), r < 100 && (r = "0" + r), r < 10 && (r = "0" + r), '"' + p + "-" + s + "-" + o + "T" + h + ":" + f + ":" + e + "." + r + 'Z"'; + if (t.constructor === Array) { + for (v = [], c = 0; c < t.length; c++) v.push(n.toJSON(t[c]) || "null"); + return "[" + v.join(",") + "]" + } + a = []; + for (u in t) { + if (i = typeof u, i == "number") l = '"' + u + '"'; + else if (i == "string") l = n.quoteString(u); + else continue; + typeof t[u] != "function" && (y = n.toJSON(t[u]), a.push(l + ":" + y)) + } + return "{" + a.join(", ") + "}" + } + }, n.evalJSON = function(n) { + return typeof JSON == "object" && JSON.parse ? JSON.parse(n) : eval("(" + n + ")") + }, n.secureEvalJSON = function(n) { + if (typeof JSON == "object" && JSON.parse) return JSON.parse(n); + var t = n; + if (t = t.replace(/\\["\\\/bfnrtu]/g, "@"), t = t.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]"), t = t.replace(/(?:^|:|,)(?:\s*\[)+/g, ""), /^[\],:{}\s]*$/.test(t)) return eval("(" + n + ")"); + throw new SyntaxError("Error parsing JSON, source is not valid."); + }, n.quoteString = function(n) { + return n.match(t) ? '"' + n.replace(t, function(n) { + var t = i[n]; + return typeof t == "string" ? t : (t = n.charCodeAt(), "\\u00" + Math.floor(t / 16).toString(16) + (t % 16).toString(16)) + }) + '"' : '"' + n + '"' + }; + var t = /["\\\x00-\x1f\x7f-\x9f]/g, + i = { + "\b": "\\b", + "\t": "\\t", + "\n": "\\n", + "\f": "\\f", + "\r": "\\r", + '"': '\\"', + "\\": "\\\\" + } +})(jQuery); + +; /// jquery.simplemodal-1.3.5.js +(function(n) { + var i = n.browser.msie && parseInt(n.browser.version) == 6 && typeof window.XMLHttpRequest != "object", + r = !1, + t = []; + n.modal = function(t, i) { + return n.modal.impl.init(t, i) + }, n.modal.close = function() { + n.modal.impl.close() + }, n.fn.modal = function(t) { + return n.modal.impl.init(this, t) + }, n.modal.defaults = { + appendTo: "body", + focus: !0, + opacity: 50, + overlayId: "simplemodal-overlay", + overlayCss: {}, + containerId: "simplemodal-container", + containerCss: {}, + dataId: "simplemodal-data", + dataCss: {}, + minHeight: null, + minWidth: null, + maxHeight: null, + maxWidth: null, + autoResize: !1, + autoPosition: !0, + zIndex: 1e3, + close: !0, + closeHTML: '', + closeClass: "simplemodal-close", + escClose: !0, + overlayClose: !1, + position: null, + persist: !1, + modal: !0, + onOpen: null, + onShow: null, + onClose: null + }, n.modal.impl = { + o: null, + d: {}, + init: function(t, i) { + var r = this; + if (r.d.data) return !1; + if (r.o = n.extend({}, n.modal.defaults, i), r.zIndex = r.o.zIndex, r.occb = !1, typeof t == "object") t = t instanceof jQuery ? t : n(t), r.d.placeholder = !1, t.parent().parent().size() > 0 && (t.before(n("").attr("id", "simplemodal-placeholder").css({ + display: "none" + })), r.d.placeholder = !0, r.display = t.css("display"), r.o.persist || (r.d.orig = t.clone(!0))); + else if (typeof t == "string" || typeof t == "number") t = n("
").html(t); + else return alert("SimpleModal Error: Unsupported data type: " + typeof t), r; + return r.create(t), t = null, r.open(), n.isFunction(r.o.onShow) && r.o.onShow.apply(r, [r.d]), r + }, + create: function(r) { + var u = this; + t = u.getDimensions(), u.o.modal && i && (u.d.iframe = n('').css(n.extend(u.o.iframeCss, { + display: "none", + opacity: 0, + position: "fixed", + height: t[0], + width: t[1], + zIndex: u.o.zIndex, + top: 0, + left: 0 + })).appendTo(u.o.appendTo)), u.d.overlay = n("
").attr("id", u.o.overlayId).addClass("simplemodal-overlay").css(n.extend(u.o.overlayCss, { + display: "none", + opacity: u.o.opacity / 100, + height: u.o.modal ? t[0] : 0, + width: u.o.modal ? t[1] : 0, + position: "fixed", + left: 0, + top: 0, + zIndex: u.o.zIndex + 1 + })).appendTo(u.o.appendTo), u.d.container = n("
").attr("id", u.o.containerId).addClass("simplemodal-container").css(n.extend(u.o.containerCss, { + display: "none", + position: "fixed", + zIndex: u.o.zIndex + 2 + })).append(u.o.close && u.o.closeHTML ? n(u.o.closeHTML).addClass(u.o.closeClass) : "").appendTo(u.o.appendTo), u.d.wrap = n("
").attr("tabIndex", -1).addClass("simplemodal-wrap").css({ + height: "100%", + outline: 0, + width: "100%", + overflow: "visible" + }).appendTo(u.d.container), u.d.data = r.attr("id", r.attr("id") || u.o.dataId).addClass("simplemodal-data").css(n.extend(u.o.dataCss, { + display: "none" + })).appendTo("body"), r = null, u.setContainerDimensions(), u.d.data.appendTo(u.d.wrap), i && u.fixIE() + }, + bindEvents: function() { + var r = this; + n("." + r.o.closeClass).bind("click.simplemodal", function(n) { + n.preventDefault(), r.close() + }), r.o.modal && r.o.close && r.o.overlayClose && r.d.overlay.bind("click.simplemodal", function(n) { + n.preventDefault(), r.close() + }), n(document).bind("keydown.simplemodal", function(n) { + r.o.modal && r.o.focus && n.keyCode == 9 ? r.watchTab(n) : r.o.close && r.o.escClose && n.keyCode == 27 && (n.preventDefault(), r.close()) + }), n(window).bind("resize.simplemodal", function() { + t = r.getDimensions(), r.setContainerDimensions(!0), i ? r.fixIE() : r.o.modal && (r.d.iframe && r.d.iframe.css({ + height: t[0], + width: t[1] + }), r.d.overlay.css({ + height: t[0], + width: t[1] + })) + }) + }, + unbindEvents: function() { + n("." + this.o.closeClass).unbind("click.simplemodal"), n(document).unbind("keydown.simplemodal"), n(window).unbind("resize.simplemodal"), this.d.overlay.unbind("click.simplemodal") + }, + fixIE: function() { + var i = this, + t = i.o.position; + n.each([i.d.iframe || null, i.o.modal ? i.d.overlay : null, i.d.container], function(n, i) { + var l, c, o, e; + if (i) { + var s = "document.body.clientHeight", + h = "document.body.clientWidth", + b = "document.body.scrollHeight", + a = "document.body.scrollLeft", + v = "document.body.scrollTop", + p = "document.body.scrollWidth", + y = "document.documentElement.clientHeight", + w = "document.documentElement.clientWidth", + u = "document.documentElement.scrollLeft", + f = "document.documentElement.scrollTop", + r = i[0].style; + r.position = "absolute", n < 2 ? (r.removeExpression("height"), r.removeExpression("width"), r.setExpression("height", "" + b + " > " + s + " ? " + b + " : " + s + ' + "px"'), r.setExpression("width", "" + p + " > " + h + " ? " + p + " : " + h + ' + "px"')) : (t && t.constructor == Array ? (o = t[0] ? typeof t[0] == "number" ? t[0].toString() : t[0].replace(/px/, "") : i.css("top").replace(/px/, ""), l = o.indexOf("%") == -1 ? o + " + (t = " + f + " ? " + f + " : " + v + ') + "px"' : parseInt(o.replace(/%/, "")) + " * ((" + y + " || " + s + ") / 100) + (t = " + f + " ? " + f + " : " + v + ') + "px"', t[1] && (e = typeof t[1] == "number" ? t[1].toString() : t[1].replace(/px/, ""), c = e.indexOf("%") == -1 ? e + " + (t = " + u + " ? " + u + " : " + a + ') + "px"' : parseInt(e.replace(/%/, "")) + " * ((" + w + " || " + h + ") / 100) + (t = " + u + " ? " + u + " : " + a + ') + "px"')) : (l = "(" + y + " || " + s + ") / 2 - (this.offsetHeight / 2) + (t = " + f + " ? " + f + " : " + v + ') + "px"', c = "(" + w + " || " + h + ") / 2 - (this.offsetWidth / 2) + (t = " + u + " ? " + u + " : " + a + ') + "px"'), r.removeExpression("top"), r.removeExpression("left"), r.setExpression("top", l), r.setExpression("left", c)) + } + }) + }, + focus: function(t) { + var r = this, + u = t || "first", + i = n(":input:enabled:visible:" + u, r.d.wrap); + i.length > 0 ? i.focus() : r.d.wrap.focus() + }, + getDimensions: function() { + var t = n(window), + i = n.browser.opera && n.browser.version > "9.5" && n.fn.jquery <= "1.2.6" ? document.documentElement.clientHeight : n.browser.opera && n.browser.version < "9.5" && n.fn.jquery > "1.2.6" ? window.innerHeight : t.height(); + return [i, t.width()] + }, + getVal: function(n) { + return n == "auto" ? 0 : n.indexOf("%") > 0 ? n : parseInt(n.replace(/px/, "")) + }, + setContainerDimensions: function(i) { + var r = this; + if (!i || i && r.o.autoResize) { + var f = n.browser.opera ? r.d.container.height() : r.getVal(r.d.container.css("height")), + u = n.browser.opera ? r.d.container.width() : r.getVal(r.d.container.css("width")), + s = r.d.data.outerHeight(!0), + h = r.d.data.outerWidth(!0), + e = r.o.maxHeight && r.o.maxHeight < t[0] ? r.o.maxHeight : t[0], + o = r.o.maxWidth && r.o.maxWidth < t[1] ? r.o.maxWidth : t[1]; + f = f ? f > e ? e : f : s ? s > e ? e : s < r.o.minHeight ? r.o.minHeight : s : r.o.minHeight, u = u ? u > o ? o : u : h ? h > o ? o : h < r.o.minWidth ? r.o.minWidth : h : r.o.minWidth, r.d.container.css({ + height: f, + width: u + }) + } + r.o.autoPosition && r.setPosition() + }, + setPosition: function() { + var n = this, + r, i, f = t[0] / 2 - n.d.container.outerHeight(!0) / 2, + u = t[1] / 2 - n.d.container.outerWidth(!0) / 2; + n.o.position && Object.prototype.toString.call(n.o.position) === "[object Array]" ? (r = n.o.position[0] || f, i = n.o.position[1] || u) : (r = f, i = u), n.d.container.css({ + left: i, + top: r + }) + }, + watchTab: function(t) { + var i = this, + r; + n(t.target).parents(".simplemodal-container").length > 0 ? (i.inputs = n(":input:enabled:visible:first, :input:enabled:visible:last", i.d.data[0]), (!t.shiftKey && t.target == i.inputs[i.inputs.length - 1] || t.shiftKey && t.target == i.inputs[0] || i.inputs.length == 0) && (t.preventDefault(), r = t.shiftKey ? "last" : "first", setTimeout(function() { + i.focus(r) + }, 10))) : (t.preventDefault(), setTimeout(function() { + i.focus() + }, 10)) + }, + open: function() { + var t = this; + t.d.iframe && t.d.iframe.show(), n.isFunction(t.o.onOpen) ? t.o.onOpen.apply(t, [t.d]) : (t.d.overlay.show(), t.d.container.show(), t.d.data.show()), t.focus(), t.bindEvents() + }, + close: function() { + var t = this, + i; + if (!t.d.data) return !1; + t.unbindEvents(), n.isFunction(t.o.onClose) && !t.occb ? (t.occb = !0, t.o.onClose.apply(t, [t.d])) : (t.d.placeholder ? (i = n("#simplemodal-placeholder"), t.o.persist ? i.replaceWith(t.d.data.removeClass("simplemodal-data").css("display", t.display)) : (t.d.data.hide().remove(), i.replaceWith(t.d.orig))) : t.d.data.hide().remove(), t.d.container.hide().remove(), t.d.overlay.hide().remove(), t.d.iframe && t.d.iframe.hide().remove(), t.d = {}) + } + } +})(jQuery); + +; /// jquery.tipsy.js +(function(n) { + n.fn.tipsy = function(t) { + return t = n.extend({}, n.fn.tipsy.defaults, t), this.each(function() { + var i = n.fn.tipsy.elementOptions(this, t); + n(this).hover(function() { + var t, e, r; + n.data(this, "cancel.tipsy", !0), t = n.data(this, "active.tipsy"), t || (t = n('
'), t.css({ + position: "absolute", + zIndex: 999999 + }), n.data(this, "active.tipsy", t)), (n(this).attr("title") || typeof n(this).attr("original-title") != "string") && n(this).attr("original-title", n(this).attr("title") || "").removeAttr("title"), typeof i.title == "string" ? e = n(this).attr(i.title == "title" ? "original-title" : i.title) : typeof i.title == "function" && (e = i.title.call(this)), t.find(".tipsy-inner")[i.html ? "html" : "text"](e || i.fallback), r = n.extend({}, n(this).offset(), { + width: this.offsetWidth, + height: this.offsetHeight + }), t.get(0).className = "tipsy", t.remove().css({ + top: 0, + left: 0, + visibility: "hidden", + display: "block" + }).appendTo(document.body); + var f = t[0].offsetWidth, + u = t[0].offsetHeight, + o = typeof i.gravity == "function" ? i.gravity.call(this) : i.gravity; + switch (o.charAt(0)) { + case "n": + t.css({ + top: r.top + r.height, + left: r.left + r.width / 2 - f / 2 + }).addClass("tipsy-north"); + break; + case "s": + t.css({ + top: r.top - u, + left: r.left + r.width / 2 - f / 2 + }).addClass("tipsy-south"); + break; + case "e": + t.css({ + top: r.top + r.height / 2 - u / 2, + left: r.left - f + }).addClass("tipsy-east"); + break; + case "w": + t.css({ + top: r.top + r.height / 2 - u / 2, + left: r.left + r.width + }).addClass("tipsy-west") + } + i.fade ? t.css({ + opacity: 0, + display: "block", + visibility: "visible" + }).animate({ + opacity: .8 + }) : t.css({ + visibility: "visible" + }) + }, function() { + n.data(this, "cancel.tipsy", !1); + var t = this; + setTimeout(function() { + if (!n.data(this, "cancel.tipsy")) { + var r = n.data(t, "active.tipsy"); + i.fade ? r.stop().fadeOut(function() { + n(this).remove() + }) : r.remove() + } + }, 100) + }) + }) + }, n.fn.tipsy.elementOptions = function(t, i) { + return n.metadata ? n.extend({}, i, n(t).metadata()) : i + }, n.fn.tipsy.defaults = { + fade: !1, + fallback: "", + gravity: "n", + html: !1, + title: "title" + }, n.fn.tipsy.autoNS = function() { + return n(this).offset().top > n(document).scrollTop() + n(window).height() / 2 ? "s" : "n" + }, n.fn.tipsy.autoWE = function() { + return n(this).offset().left > n(document).scrollLeft() + n(window).width() / 2 ? "e" : "w" + } +})(jQuery); + +; /// AjaxAvatarThumbnail.js +var RobloxThumbs = function() { + function n(t, i, r) { + $.get("/thumbs/rawavatar.ashx", { + UserID: i, + ThumbnailFormatID: r + }, function(u) { + u == "PENDING" ? window.setTimeout(function() { + n(t, i, r) + }, 3e3) : u.substring(5, 0) == "ERROR" || $("#" + t).attr("src", u) + }) + } + return { + GenerateAvatarThumb: function(t, i, r) { + $("#" + t).attr("src", "/images/spinners/waiting.gif"), n(t, i, r) + } + } +}(); + +; /// extensions/string.js +$.extend(String.prototype, function() { + function n() { + return this.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'") + } + return { + escapeHTML: n + } +}()); + +; /// StringTruncator.min.js +function InitStringTruncator() { + isInitialized || (fitStringSpan = document.createElement("span"), fitStringSpan.style.display = "inline", fitStringSpan.style.visibility = "hidden", fitStringSpan.style.padding = "0px", document.body.appendChild(fitStringSpan), isInitialized = !0) +} + +function fitStringToWidth(n, t, i) { + function f(n) { + return n.replace("<", "<").replace(">", ">") + } + if (isInitialized || InitStringTruncator(), i && (fitStringSpan.className = i), i = f(n), fitStringSpan.innerHTML = i, fitStringSpan.offsetWidth > t) { + for (var i = 0, r, u = n.length; r = u - i >> 1;) r = i + r, fitStringSpan.innerHTML = f(n.substring(0, r)) + "…", fitStringSpan.offsetWidth > t ? u = r : i = r; + i = n.substring(0, i) + "…" + } + return i +} + +function fitStringToWidthSafe(n, t, i) { + return n = fitStringToWidth(n, t, i), n.indexOf("…") != -1 && (t = n.lastIndexOf(" "), t != -1 && t + 10 <= n.length && (n = n.substring(0, t + 2) + "…")), n +} +var isInitialized = !1, + fitStringSpan = null; + +; /// json2.min.js +var JSON; +JSON || (JSON = {}), + function() { + "use strict"; + + function i(n) { + return n < 10 ? "0" + n : n + } + + function f(n) { + return o.lastIndex = 0, o.test(n) ? '"' + n.replace(o, function(n) { + var t = s[n]; + return typeof t == "string" ? t : "\\u" + ("0000" + n.charCodeAt(0).toString(16)).slice(-4) + }) + '"' : '"' + n + '"' + } + + function r(i, e) { + var c, l, h, a, v = n, + s, o = e[i]; + o && typeof o == "object" && typeof o.toJSON == "function" && (o = o.toJSON(i)), typeof t == "function" && (o = t.call(e, i, o)); + switch (typeof o) { + case "string": + return f(o); + case "number": + return isFinite(o) ? String(o) : "null"; + case "boolean": + case "null": + return String(o); + case "object": + if (!o) return "null"; + if (n += u, s = [], Object.prototype.toString.apply(o) === "[object Array]") { + for (a = o.length, c = 0; c < a; c += 1) s[c] = r(c, o) || "null"; + return h = s.length === 0 ? "[]" : n ? "[\n" + n + s.join(",\n" + n) + "\n" + v + "]" : "[" + s.join(",") + "]", n = v, h + } + if (t && typeof t == "object") + for (a = t.length, c = 0; c < a; c += 1) l = t[c], typeof l == "string" && (h = r(l, o), h && s.push(f(l) + (n ? ": " : ":") + h)); + else + for (l in o) Object.hasOwnProperty.call(o, l) && (h = r(l, o), h && s.push(f(l) + (n ? ": " : ":") + h)); + return h = s.length === 0 ? "{}" : n ? "{\n" + n + s.join(",\n" + n) + "\n" + v + "}" : "{" + s.join(",") + "}", n = v, h + } + } + typeof Date.prototype.toJSON != "function" && (Date.prototype.toJSON = function() { + return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + i(this.getUTCMonth() + 1) + "-" + i(this.getUTCDate()) + "T" + i(this.getUTCHours()) + ":" + i(this.getUTCMinutes()) + ":" + i(this.getUTCSeconds()) + "Z" : null + }, String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function() { + return this.valueOf() + }); + var e = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + o = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + n, u, s = { + "\b": "\\b", + "\t": "\\t", + "\n": "\\n", + "\f": "\\f", + "\r": "\\r", + '"': '\\"', + "\\": "\\\\" + }, + t; + typeof JSON.stringify != "function" && (JSON.stringify = function(i, f, e) { + var o; + if (n = "", u = "", typeof e == "number") + for (o = 0; o < e; o += 1) u += " "; + else typeof e == "string" && (u = e); + if (t = f, f && typeof f != "function" && (typeof f != "object" || typeof f.length != "number")) throw new Error("JSON.stringify"); + return r("", { + "": i + }) + }), typeof JSON.parse != "function" && (JSON.parse = function(n, t) { + function r(n, i) { + var f, e, u = n[i]; + if (u && typeof u == "object") + for (f in u) Object.hasOwnProperty.call(u, f) && (e = r(u, f), e !== undefined ? u[f] = e : delete u[f]); + return t.call(n, i, u) + } + var i; + if (n = String(n), e.lastIndex = 0, e.test(n) && (n = n.replace(e, function(n) { + return "\\u" + ("0000" + n.charCodeAt(0).toString(16)).slice(-4) + })), /^[\],:{}\s]*$/.test(n.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) return i = eval("(" + n + ")"), typeof t == "function" ? r({ + "": i + }, "") : i; + throw new SyntaxError("JSON.parse"); + }) + }(); + +; /// webkit.js +typeof Sys.Browser.WebKit == "undefined" && (Sys.Browser.WebKit = {}), navigator.userAgent.indexOf("WebKit/") > -1 && (Sys.Browser.agent = Sys.Browser.WebKit, Sys.Browser.version = parseFloat(navigator.userAgent.match(/WebKit\/(\d+(\.\d+)?)/)[1]), Sys.Browser.name = "WebKit"); + +; /// GoogleAnalytics/GoogleAnalyticsEvents.js +var GoogleAnalyticsEvents = new function() { + this.FireEvent = function(n) { + if (typeof _gaq != typeof undefined) { + var i = ["_trackEvent"], + t = ["b._trackEvent"]; + _gaq.push(i.concat(n)), _gaq.push(t.concat(n)) + } + } +}; + +; /// MasterPageUI.js +$(function() { + $(".tooltip").tipsy(), $(".tooltip-top").tipsy({ + gravity: "s" + }), $(".tooltip-right").tipsy({ + gravity: "w" + }), $(".tooltip-left").tipsy({ + gravity: "e" + }), $(".tooltip-bottom").tipsy({ + gravity: "n" + }) +}), typeof Roblox == "undefined" && (Roblox = {}), Roblox.FixedUI = function() { + function s() { + if (typeof pageYOffset != "undefined") return pageYOffset; + var t = document.body, + n = document.documentElement; + return n = n.clientHeight ? n : t, n.scrollTop + } + + function e() { + var n = s(); + t || (t = $("iframe.IframeAdHide")), t.each(function() { + var t = $(this).offset().top - 73; + !r.gutterAdsEnabled && n >= t ? $(this).css("visibility", "hidden") : $(this).css("visibility", "visible") + }) + } + + function i() { + $("#Nav").css("cssText", "position: static !important;width:970px !important"), $("#SmallHeaderContainer").css("cssText", "position: relative !important;height: 36px !important;width:970px !important"), $(".forceSpace").css("cssText", "width: 970px !important; height:9px !important;padding-top: 0px !important;background:white"), $("#Container").css("cssText", "width: 970px !important"), $(".mySubmenuFixed").css("cssText", "position: relative; top: 0px;"), $("#MasterContainer").css("cssText", "width: 970px !important"), $(".mySubmenuFixed").length == 1 && ($(".forceSpaceUnderSubmenu").hide(), $(".forceSpace").css("cssText", "width: 910px !important; height:7px !important;padding-top: 0px !important;")), $(window).unbind("scroll") + } + + function h() { + $("#Nav").css("cssText", "position: fixed !important;width:100% !important"), $("#SmallHeaderContainer").css("cssText", "position: fixed !important;height: 40px !important;width:100% !important"), $(".forceSpace").css("cssText", "width: 100% !important; height:15px !important;padding-top: 62px !important;"), $("#Container").css("cssText", "width: 100% !important"), $(".mySubmenuFixed").css("cssText", "position: fixed; top: 68px;"), $("#MasterContainer").css("cssText", "width: 100%"), $(".mySubmenuFixed").length == 1 && $(".forceSpaceUnderSubmenu").show(), $(window).scroll(e) + } + + function o() { + var n = 1024; + return document.body && document.body.offsetWidth && (n = document.body.offsetWidth), window.innerWidth && window.innerHeight && (n = window.innerWidth), n + } + + function u() { + o() < 978 ? i() : h() + } + var n = navigator.userAgent.toLowerCase(), + f = /mobile/i.test(n) || /ipad/i.test(n) || /iphone/i.test(n) || /android/i.test(n) || /playbook/i.test(n) || /blackberry/i.test(n), + t, r; + return $(function() { + f ? i() : $(window).load(u).resize(u) + }), t = null, r = { + isMobile: f, + gutterAdsEnabled: !1, + unfixHeader: i + } +}(); + +; /// jquery.cookie.js +jQuery.cookie = function(n, t, i) { + var o, r, f, e, u, s; + if (typeof t != "undefined") { + i = i || {}, t === null && (t = "", i.expires = -1), o = "", i.expires && (typeof i.expires == "number" || i.expires.toUTCString) && (typeof i.expires == "number" ? (r = new Date, r.setTime(r.getTime() + i.expires * 864e5)) : r = i.expires, o = "; expires=" + r.toUTCString()); + var h = i.path ? "; path=" + i.path : "", + c = i.domain ? "; domain=" + i.domain : "", + l = i.secure ? "; secure" : ""; + document.cookie = [n, "=", encodeURIComponent(t), o, h, c, l].join("") + } else { + if (f = null, document.cookie && document.cookie != "") + for (e = document.cookie.split(";"), u = 0; u < e.length; u++) + if (s = jQuery.trim(e[u]), s.substring(0, n.length + 1) == n + "=") { + f = decodeURIComponent(s.substring(n.length + 1)); + break + } return f + } +}; + +; /// jquery.jsoncookie.js +function RobloxJSONCookie(n) { + this._cookiename = n +}(function(n) { + var t = function(n) { + return typeof n == "object" && !(n instanceof Array) && n !== null + }; + n.extend({ + getJSONCookie: function(t, i) { + var r = n.cookie(t); + return i ? r : r ? JSON.parse(r) : {} + }, + setJSONCookie: function(i, r, u) { + var f = ""; + return u = n.extend({ + expires: 90, + path: "/" + }, u), f = t(r) ? JSON.stringify(r) : r, n.cookie(i, f, u) + }, + removeJSONCookie: function(t) { + return n.cookie(t, null) + }, + JSONCookie: function(t, i, r) { + return i && n.setJSONCookie(t, i, r), n.getJSONCookie(t) + } + }) +})(jQuery), RobloxJSONCookie.prototype = { + Delete: function() { + return $.removeJSONCookie(this._cookiename) + }, + SetObj: function(n, t) { + return t || (t = { + path: "/" + }), $.JSONCookie(this._cookiename, n, t) + }, + SetJSON: function(n, t) { + return t || (t = { + path: "/" + }), $.JSONCookie(this._cookiename, n, t) + }, + GetObj: function() { + var n = $.getJSONCookie(this._cookiename, !1); + return n == null ? {} : n + }, + GetJSON: function() { + return $.getJSONCookie(this._cookiename, !0) + } +}; + +; /// XsrfToken.js +typeof Roblox == "undefined" && (Roblox = {}), Roblox.XsrfToken = function() { + function f(n) { + var u, t; + if (i.allUrlsEnabled) return !0; + for (u = n.split("?")[0].toLowerCase(), t = 0; t < r.length; t++) + if (r[t] === u) return !0; + return !1 + } + + function e(n) { + r.push(n.toLowerCase()) + } + + function o(t) { + n = t + } + + function u() { + return n + } + var n = "", + t = /(^|\?|&)token=[^&]*/, + r = ["/chat/friendhandler.ashx", "/chat/party.ashx", "/chat/send.ashx", "/chat/utility.ashx", "/groups/rolesetupdater.ashx", "groups.aspx/exileuseranddeleteposts", "messageshandler.ashx", "emailupgrademe.ashx", "/services/usercheck.asmx/updatepersonalinfo", "/thumbs/assetmedia/placemediaitemsorthandler.ashx"], + i; + return $.ajaxPrefilter(function(i) { + var o, e; + i.dataType != "jsonp" && i.dataType != "script" && n != "" && f(i.url) && (o = $.param({ + token: n + }), t.test(i.url) || typeof i.data != "undefined" && t.test(i.data) || (i.url += /\?/.test(i.url) ? "&token=" + encodeURIComponent(n) : "?token=" + encodeURIComponent(n)), e = i.error, i.error = function(r, u, f) { + if (r.status == 420) { + var o = r.getResponseHeader("Token"); + if (o == null) { + typeof e == "function" && e(r, u, f); + throw new Error("Null token returned by Xsrf enabled handler"); + } + t.test(i.url) ? i.url = i.url.replace(t, "$1token=" + encodeURIComponent(o)) : i.data = i.data.replace(t, "$1token=" + encodeURIComponent(o)), $.ajax(i), n = o + } else typeof e == "function" && e(r, u, f) + }) + }), i = { + setToken: o, + getToken: u, + allUrlsEnabled: !1, + addEnabledUrl: e + } +}(); + +; /// RobloxEventManager.js +function RBXBaseEventListener() { + if (!(this instanceof RBXBaseEventListener)) return new RBXBaseEventListener; + this.init = function() { + for (eventKey in this.events) $(document).bind(this.events[eventKey], $.proxy(this.localCopy, this)) + }, this.events = [], this.localCopy = function(n, t) { + var r = $.extend(!0, {}, n), + i = $.extend(!0, {}, t); + this.handleEvent(r, i) + }, this.distillData = function() { + return console.log("RBXEventListener distillData - Please implement me"), !1 + }, this.handleEvent = function() { + return console.log("EventListener handleEvent - Please implement me"), !1 + }, this.fireEvent = function() { + return console.log("EventListener fireEvent - Please implement me"), !1 + } +} +RobloxEventManager = new function() { + function u(n) { + var i = new RegExp(n + "=([^;]*)"), + t = i.exec(document.cookie); + return t ? t[1] : null + } + + function t(n) { + for (var u = {}, r = n.split("&"), i, t = 0; t < r.length; t++) i = r[t].split("="), u[i[0]] = i[1]; + return u + } + + function i(n) { + var i = u(n); + return i ? t(i) : null + } + var n = [], + r = {}; + this.enabled = !1, this.initialized = !1, this.eventQueue = [], this.initialize = function(n) { + for (this.initialized = !0, this.enabled = n; this.eventQueue.length > 0;) { + var t = this.eventQueue.pop(); + this.triggerEvent(t.eventName, t.args) + } + }, this.getMarketingGuid = function() { + var n = i("RBXEventTracker"); + return n != null ? n.browserid : -1 + }, this.triggerEvent = function(n, t) { + this.initialized ? this.enabled && (typeof t == "undefined" && (t = {}), t.guid = this.getMarketingGuid(), t.guid != -1 && $(document).trigger(n, [t])) : this.eventQueue.push({ + eventName: n, + args: t + }) + }, this.registerCookieStoreEvent = function(t) { + n.push(t) + }, this.insertDataStoreKeyValuePair = function(n, t) { + r[n] = t + }, this.monitorCookieStore = function() { + var i, u, f, t, r; + try { + if (typeof Roblox == "undefined" || typeof Roblox.Client == "undefined" || window.location.protocol == "https:") return; + if (i = Roblox.Client.CreateLauncher(!1), i == null) return; + for (u = 0; u < n.length; u++) try { + f = n[u], t = i.GetKeyValue(f), t != "" && t != "-1" && t != "RBX_NOT_VALID" && (r = eval("(" + t + ")"), r.userType = r.userId > 0 ? "user" : "guest", RobloxEventManager.triggerEvent(f, r), i.SetKeyValue(f, "RBX_NOT_VALID")) + } catch (e) {} + Roblox.Client.ReleaseLauncher(i, !1, !1) + } catch (e) {} + } +}; + +; /// RobloxEventListener.js +RobloxListener = new RBXBaseEventListener, RobloxListener.handleEvent = function(n, t) { + var r, u, i; + switch (n.type) { + case "rbx_evt_install_begin": + i = { + guid: "guid", + userId: "userid" + }, r = n.type; + break; + case "rbx_evt_initial_install_start": + i = { + guid: "guid", + userId: "userid" + }, r = n.type; + break; + case "rbx_evt_ftp": + i = { + guid: "guid", + userId: "userid" + }, r = n.type; + break; + case "rbx_evt_initial_install_success": + i = { + guid: "guid", + userId: "userid" + }, r = n.type; + break; + case "rbx_evt_fmp": + i = { + guid: "guid", + userId: "userid" + }, r = n.type; + break; + default: + return console.log("RobloxEventListener - Event registered without handling instructions: " + n.type), !1 + } + return u = this.distillData(t, i), this.fireEvent(this.eventToString(r, u)), !0 +}, RobloxListener.distillData = function(n, t) { + var i = {}; + for (dataKey in t) typeof n[dataKey] != typeof undefined && (i[t[dataKey]] = encodeURIComponent(n[dataKey])); + return i +}, RobloxListener.eventToString = function(n, t) { + var i = RobloxListener.restUrl; + if (i += "?event=" + n + "&", t != null) + for (arg in t) typeof arg != typeof undefined && t.hasOwnProperty(arg) && (i += arg + "=" + t[arg] + "&"); + return i = i.slice(0, i.length - 1) +}, RobloxListener.fireEvent = function(n) { + var t = $('') +}, RobloxListener.events = ["rbx_evt_install_begin", "rbx_evt_initial_install_start", "rbx_evt_ftp", "rbx_evt_initial_install_success", "rbx_evt_fmp"]; + +; /// KontagentEventListener.js +KontagentListener = new RBXBaseEventListener, KontagentListener.restUrl = "", KontagentListener.APIKey = "", KontagentListener.StagingAPIKey = "", KontagentListener.StagingEvents = [], KontagentListener.handleEvent = function(n, t) { + function f(n) { + return n = n.toLowerCase(), n == "win32" ? n = "Windows" : n == "osx" && (n = "Mac"), n + } + var r, u, i, o, e; + r = "evt"; + switch (n.type) { + case "rbx_evt_pageview": + i = { + guid: "s", + path: "u", + ts: "ts", + user_ip: "ip" + }, r = "pgr"; + break; + case "rbx_evt_userinfo": + i = { + guid: "s", + age: "b", + gender: "g" + }, r = "cpu"; + break; + case "rbx_evt_ecomm_item": + t.total = Math.round(t.total * 100), t.productName = t.productName.replace(/\s/g, "").replace("Outrageous", "O").replace("Turbo", "T").replace("Builders", "B").replace("Club", "C"), i = { + guid: "s", + total: "v", + provider: "st1", + category: "st2", + productName: "st3", + type: "tu" + }, r = "mtu"; + break; + case "rbx_evt_ftp": + t.tracking = "", t.shorttracking = "", i = { + guid: "s", + trackingtag: "u", + shorttracking: "su" + }, u = this.distillData(t, i), r = "apa", this.fireEvent(this.eventToString(n.type, r, u)), t.eventName = "Install Success Funnel", t.eventType = "Install Success Funnel", t.os = f(t.os), i = { + guid: "s", + eventType: "st1", + os: "st2", + userType: "st3", + eventName: "n" + }, u = this.distillData(t, i), r = "evt", this.fireEvent(this.eventToString(n.type, r, u)), t.eventType = "Install Success Place", i = { + guid: "s", + eventType: "st1", + os: "st2", + userType: "st3", + placeId: "n" + }; + break; + case "rbx_evt_initial_install_success": + t.tracking = "", t.shorttracking = "", i = { + guid: "s", + trackingtag: "u", + shorttracking: "su" + }, u = this.distillData(t, i), r = "apa", this.fireEvent(this.eventToString(n.type, r, u)), t.eventName = "Bootstrapper Install Success Funnel", t.eventType = "Bootstrapper Install Success Funnel", t.os = f(t.os), i = { + guid: "s", + eventType: "st1", + os: "st2", + userType: "st3", + eventName: "n" + }, u = this.distillData(t, i), r = "evt", this.fireEvent(this.eventToString(n.type, r, u)), t.eventType = "Bootstrapper Install Success Place", i = { + guid: "s", + eventType: "st1", + os: "st2", + userType: "st3", + placeId: "n" + }; + break; + case "rbx_evt_install_begin": + t.eventName = "Install Begin", t.eventType = "Install Begin", i = { + guid: "s", + eventType: "st1", + os: "st2", + eventName: "n" + }; + break; + case "rbx_evt_initial_install_start": + t.eventName = "Bootstrapper Install Begin", t.eventType = "Bootstrapper Install Begin", i = { + guid: "s", + eventType: "st1", + os: "st2", + eventName: "n" + }; + break; + case "rbx_evt_fmp": + t.eventName = "Five Minute Play Funnel", t.eventType = "Five Minute Play Funnel", t.os = f(t.os), i = { + guid: "s", + eventType: "st1", + os: "st2", + userType: "st3", + eventName: "n" + }, u = this.distillData(t, i), this.fireEvent(this.eventToString(n.type, r, u)), t.eventType = "Five Minute Play Place", i = { + guid: "s", + eventType: "st1", + os: "st2", + userType: "st3", + placeId: "n" + }; + break; + case "rbx_evt_play_user": + t.eventName = "Play User", t.eventType = "Play User", t.gender = t.gender, i = { + guid: "s", + eventType: "st1", + gender: "st2", + age: "st3", + placeId: "l", + eventName: "n" + }; + break; + case "rbx_evt_play_guest": + t.eventName = "Play Guest", t.eventType = "Play Guest", t.gender = t.gender, i = { + guid: "s", + eventType: "st1", + gender: "st2", + placeId: "l", + eventName: "n" + }; + break; + case "rbx_evt_signup": + t.eventName = "Sign Up Funnel", t.eventType = "Sign Up Funnel", i = { + guid: "s", + eventType: "st1", + eventName: "n" + }, u = this.distillData(t, i), r = "evt", this.fireEvent(this.eventToString(n.type, r, u)), t.eventName = "Sign Up", t.eventType = "Sign Up", t.gender = t.gender, i = { + guid: "s", + eventType: "st1", + gender: "st2", + age: "st3", + eventName: "n" + }; + break; + case "rbx_evt_ecomm_custom": + t.eventType = "Purchase", t.productName = t.productName.replace(/\s/g, "").replace("Outrageous", "O").replace("Turbo", "T").replace("Builders", "B").replace("Club", "C"), i = { + guid: "s", + eventType: "st1", + provider: "st2", + category: "st3", + productName: "n" + }; + break; + case "rbx_evt_abtest": + i = { + guid: "s", + experiment: "st1", + variation: "n" + }; + break; + case "rbx_evt_pageview_custom": + t.eventName = t.page, i = typeof t.userType == "undefined" ? { + guid: "s", + page: "st1", + eventName: "n" + } : { + guid: "s", + page: "st1", + userType: "st2", + eventName: "n" + }; + break; + case "rbx_evt_generic": + t.eventName = t.type, i = { + guid: "s", + type: "st1", + eventName: "n" + }, typeof t.opt1 != "undefined" && (i.opt1 = "st2"), typeof t.opt2 != "undefined" && typeof t.opt1 != "undefined" && (i.opt2 = "st3"); + break; + case "rbx_evt_source_tracking": + t.installed = 0, t.sourceType = "ad", i = { + guid: "s", + sourceType: "tu", + installed: "i", + source: "st1", + campaign: "st2", + medium: "st3" + }, r = "ucc"; + break; + case "rbx_evt_card_redemption": + t.eventType = "CardRedemption", t.eventName = "CardRedemption", i = { + guid: "s", + eventType: "st1", + merchant: "st2", + cardValue: "st3", + eventName: "n" + }; + break; + case "rbx_evt_popup_action": + t.eventType = "GuestPlayPopupAction", t.eventName = "GuestPlayPopupAction", i = { + guid: "s", + eventType: "st1", + action: "st2", + eventName: "n" + }; + break; + default: + return console.log("KontagentListener - Event registered without handling instructions: " + n.type), !1 + } + return u = this.distillData(t, i), this.fireEvent(this.eventToString(n.type, r, u)), !0 +}, KontagentListener.distillData = function(n, t) { + var i = {}; + for (dataKey in t) typeof n[dataKey] != typeof undefined && (i[t[dataKey]] = encodeURIComponent(n[dataKey])); + return i +}, KontagentListener.eventToString = function(n, t, i) { + var r = KontagentListener.restUrl, + u = this.isStagingEvent(n, i) ? KontagentListener.StagingAPIKey : KontagentListener.APIKey; + if (r += u + "/" + t + "/?", i != null) + for (arg in i) typeof arg != typeof undefined && i.hasOwnProperty(arg) && (r += arg + "=" + i[arg] + "&"); + return r = r.slice(0, r.length - 1) +}, KontagentListener.isStagingEvent = function(n, t) { + var r, i; + staging = !1; + try { + for (r in this.StagingEvents) + if (i = this.StagingEvents[r], typeof i == "string") { + if (n == i) { + staging = !0; + break + } + } else if (typeof i == "object" && typeof i[n] != "undefined" && i[n] == t.st1) { + staging = !0; + break + } + } catch (u) {} + return staging +}, KontagentListener.fireEvent = function(n) { + var t = $('') +}, KontagentListener.events = ["rbx_evt_pageview", "rbx_evt_install_begin", "rbx_evt_initial_install_start", "rbx_evt_ftp", "rbx_evt_initial_install_success", "rbx_evt_fmp", "rbx_evt_play_user", "rbx_evt_play_guest", "rbx_evt_signup", "rbx_evt_ecomm_item", "rbx_evt_ecomm_custom", "rbx_evt_userinfo", "rbx_evt_abtest", "rbx_evt_pageview_custom", "rbx_evt_generic", "rbx_evt_source_tracking", "rbx_evt_card_redemption", "rbx_evt_popup_action"]; + +; /// GoogleEventListener.js +GoogleListener = new RBXBaseEventListener, GoogleListener.handleEvent = function(n, t) { + function r(n) { + return n = n.toLowerCase(), n == "win32" ? n = "Windows" : n == "osx" && (n = "Mac"), n + } + var f, u, i; + switch (n.type) { + case "rbx_evt_initial_install_begin": + t.os = r(t.os), t.category = "Bootstrapper Install Begin", i = { + os: "action" + }; + break; + case "rbx_evt_ftp": + t.os = r(t.os), t.category = "Install Success", i = { + os: "action" + }; + break; + case "rbx_evt_initial_install_success": + t.os = r(t.os), t.category = "Bootstrapper Install Success", i = { + os: "action" + }; + break; + case "rbx_evt_fmp": + t.os = r(t.os), t.category = "Five Minute Play", i = { + os: "action" + }; + break; + case "rbx_evt_abtest": + i = { + experiment: "category", + variation: "action", + version: "opt_label" + }; + break; + case "rbx_evt_card_redemption": + t.category = "CardRedemption", i = { + merchant: "action", + cardValue: "opt_label" + }; + break; + default: + return console.log("GoogleListener - Event registered without handling instructions: " + n.type), !1 + } + return i.category = "category", u = this.distillData(t, i), this.fireEvent(u), !0 +}, GoogleListener.distillData = function(n, t) { + var i = {}, + r; + for (dataKey in t) typeof n[dataKey] != typeof undefined && (i[t[dataKey]] = n[dataKey]); + return r = [i.category, i.action], i.opt_label != null && (r = r.concat(i.opt_label)), i.opt_value != null && (r = r.concat(i.opt_value)), r +}, GoogleListener.fireEvent = function(n) { + if (typeof _gaq != typeof undefined) { + var i = ["_trackEvent"], + t = ["b._trackEvent"]; + _gaq.push(i.concat(n)), _gaq.push(t.concat(n)) + } +}, GoogleListener.events = ["rbx_evt_initial_install_begin", "rbx_evt_ftp", "rbx_evt_initial_install_success", "rbx_evt_fmp", "rbx_evt_abtest", "rbx_evt_card_redemption"]; + +; /// MongoEventListener.js +MongoListener = new RBXBaseEventListener, MongoListener.handleEvent = function(n, t) { + var i; + return i = typeof t.shard == "undefined" ? this.defaultShard : t.shard, typeof t.eventName == "undefined" && (t.eventName = n.type), t.eventName === "JavascriptExceptionLoggingEvent" ? dataMap = { + category: "category", + url: "url", + msg: "msg", + line: "line", + ua: "UA" + } : (typeof t.category == "undefined" && (t.category = MongoListener.getCategoryFromEventName(t.eventName)), t.userId = MongoListener.userId, t.ip = MongoListener.clientIpAddress, dataMap = { + guid: "guid", + category: "category", + userId: "userid", + ip: "ip" + }), this.fireEvent(i, this.distillData(t, dataMap)), !0 +}, MongoListener.getCategoryFromEventName = function(n) { + switch (n) { + case "rbx_evt_sitetouch": + return "SiteTouch"; + case "rbx_evt_fmp": + return "FiveMinutePlay"; + case "rbx_evt_play_user": + case "rbx_evt_play_guest": + return "Play"; + default: + return n + } +}, MongoListener.distillData = function(n, t) { + var i = {}; + for (dataKey in t) typeof n[dataKey] != typeof undefined && (i[t[dataKey]] = encodeURIComponent(n[dataKey])); + return i +}, MongoListener.fireEvent = function(n, t) { + $.ajax({ + url: MongoListener.loggingURI + n, + dataType: "jsonp", + jsonpCallback: "MongoListener.callback", + data: t + }) +}, MongoListener.callback = function() {}, MongoListener.events = ["JavascriptExceptionLoggingEvent"]; + +; /// SearchVisionListener.js +SearchVisionListener = new RBXBaseEventListener, SearchVisionListener.handleEvent = function(n, t) { + var i = null; + switch (n.type) { + case "rbx_evt_fmp": + i = { + esvtk_v: "1", + esvtk_esvid: "A40125", + event: "five_minute_play" + }; + break; + case "rbx_evt_ftp": + i = { + esvtk_v: "1", + esvtk_esvid: "A40125", + event: "first_play" + }; + break; + case "rbx_evt_install_begin": + i = { + esvtk_v: "1", + esvtk_esvid: "A40125", + event: "download" + }; + break; + case "rbx_evt_signup": + i = { + esvtk_v: "1", + esvtk_esvid: "A40125", + event: "esv_signup" + }; + break; + case "rbx_evt_generic": + t.type === "OneDayReturn" && (i = { + esvtk_v: "1", + esvtk_esvid: "A40125", + event: "return" + }) + } + return i !== null && (i.orderid = t.guid, this.fireEvent(i)), !0 +}, SearchVisionListener.fireEvent = function(n) { + typeof esvtk_track != "undefined" ? esvtk_track(n) : setTimeout(function() { + SearchVisionListener.fireEvent(n) + }, 500) +}, SearchVisionListener.events = ["rbx_evt_fmp", "rbx_evt_ftp", "rbx_evt_install_begin", "rbx_evt_signup", "rbx_evt_generic"]; + +; /// SiteTouchEvent.js +typeof Roblox == "undefined" && (Roblox = {}), Roblox.SiteTouchEvent = function() { + function r() { + var t, i; + return typeof localStorage != "undefined" && (t = localStorage.getItem(n)), (typeof t == "undefined" || t === null) && (t = $.cookie(n)), i = Date.parse(t), t && !isNaN(i) ? new Date(i) : new Date(0) + } + + function i(i) { + typeof i == "undefined" && (i = new Date), typeof localStorage != "undefined" && (t.useLocalStorage ? $.cookie(n, null) : localStorage.removeItem(n)), t.useLocalStorage && typeof localStorage != "undefined" ? localStorage.setItem(n, i) : $.cookie(n, i, { + expires: 100 + }) + } + + function u() { + var n = r(); + Math.floor((new Date - n) / 36e5) >= t.dateDiffThresholdInHours && RobloxEventManager.triggerEvent("rbx_evt_sitetouch"), i() + } + var n = "LastActivity", + t = { + updateLastActivityAndFireEvent: u, + getLastActivity: r, + setLastActivity: i, + dateDiffThresholdInHours: 3, + useLocalStorage: !1 + }; + return t +}(); + +; /// JSErrorTracker.js +typeof Roblox == "undefined" && (Roblox = {}), Roblox.JSErrorTracker = { + showAlert: !1, + defaultPixel: "GA", + internalEventListenerPixelEnabled: !1, + javascriptStackTraceEnabled: !1, + data: { + category: "Javascript Errors" + }, + initialize: function(n) { + typeof n != "undefined" && (typeof n.showAlert != "undefined" && (this.showAlert = n.showAlert), typeof n.internalEventListenerPixelEnabled != "undefined" && (this.internalEventListenerPixelEnabled = n.internalEventListenerPixelEnabled)), this.addOnErrorEventHandler(this.errorHandler) + }, + errorHandler: function(n, t, i) { + try { + Roblox.JSErrorTracker.data.msg = n, Roblox.JSErrorTracker.data.url = t, Roblox.JSErrorTracker.data.line = i, Roblox.JSErrorTracker.data.ua = window.navigator.userAgent, Roblox.JSErrorTracker.logException(Roblox.JSErrorTracker.data) + } catch (r) {} + return !0 + }, + addOnErrorEventHandler: function(n) { + var t = window.onerror; + window.onerror = typeof window.onerror == "function" ? function(i, r, u) { + t(i, r, u), n(i, r, u) + } : n + }, + processException: function(n, t) { + if (typeof n != "undefined") { + typeof n.category == "undefined" && (n.category = Roblox.JSErrorTracker.data.category); + switch (t) { + case "GA": + var i = { + category: "category", + url: "action", + msg: "opt_label", + line: "opt_value" + }; + Roblox.JSErrorTracker.fireGAPixel(Roblox.JSErrorTracker.distillGAData(n, i)); + break; + case "Diag": + Roblox.JSErrorTracker.internalEventListenerPixelEnabled && (n.category = "JavascriptExceptions", n.shard = "WebMetrics", n.eventName = "JavascriptExceptionLoggingEvent", RobloxEventManager.triggerEvent("JavascriptExceptionLoggingEvent", n)); + break; + default: + console.log("Roblox JSErrorTracker received an unknown pixel to fire") + } + return !0 + } + }, + logException: function(n) { + Roblox.JSErrorTracker.processException(n, Roblox.JSErrorTracker.defaultPixel), Roblox.JSErrorTracker.internalEventListenerPixelEnabled && Roblox.JSErrorTracker.processException(n, "Diag"), Roblox.JSErrorTracker.showErrorMessage(n.msg) + }, + distillData: function(n, t) { + var r = {}, + i; + for (i in t) typeof n[i] != "undefined" && (r[t[i]] = encodeURIComponent(n[i])); + return r + }, + distillGAData: function(n, t) { + var r = Roblox.JSErrorTracker.distillData(n, t), + i = [decodeURIComponent([r.category])]; + return typeof r.action != typeof undefined ? (i = i.concat(decodeURIComponent(r.action)), typeof r.opt_label != typeof undefined && (i = i.concat(decodeURIComponent(r.opt_label)), typeof r.opt_value != typeof undefined && (i = i.concat(parseInt(decodeURIComponent(r.opt_value)))))) : Roblox.JSErrorTracker.showAlert && alert("Missing a required parameter for GA"), i + }, + createURL: function(n, t, i) { + var r = n, + f = Roblox.JSErrorTracker.distillData(t, i), + u; + if (r += "?", f != null) + for (u in f) typeof u != typeof undefined && t.hasOwnProperty(u) && (r += u + "=" + f[u] + "&"); + return r = r.slice(0, r.length - 1) + }, + fireGAPixel: function(n) { + typeof _gaq != "undefined" && _gaq.push(["c._trackEvent"].concat(n)) + }, + showErrorMessage: function(n) { + Roblox.JSErrorTracker.showAlert && (n !== null ? alert(n) : alert("An error occured")) + } +}; + +; /// Studio2Alert.js +var studio2AlertModal = { + showPrompt: !1, + userId: 0, + updateStudioAlertUserPreference: function() { + $.ajax({ + type: "GET", + url: "/WebHandlers/Studio2Alert.ashx?uId=" + studio2AlertModal.userId + }) + }, + close: function() { + studio2AlertModal.updateStudioAlertUserPreference(), $.modal.close("#Studio2AlertModal") + }, + init: function() { + studio2AlertModal.showPrompt = $("#Studio2AlertModal").data("showprompt"), studio2AlertModal.userId = $("#Studio2AlertModal").data("userid"); + var n = { + escClose: !0, + opacity: 80, + overlayCss: { + backgroundColor: "#000" + } + }; + studio2AlertModal.showPrompt && Roblox.Client.isIDE() && (studio2AlertModal.updateStudioAlertUserPreference(), $("#Studio2AlertModal").modal(n)) + } +}; +$("#closeStudio2Alert").click(function() { + studio2AlertModal.close() +}), $(function() { + studio2AlertModal.init() +}); + +; /// ClientInstaller.js +function tryToDownload() { + oIFrm = document.getElementById("downloadInstallerIFrame"), oIFrm.src = "/install/setup.ashx" +} + +function logStatistics(n) { + $.get("/install/VisitButtonHandler.ashx?reqtype=" + n, function() {}) +} +Type.registerNamespace("Roblox.Client"), Roblox.Client._installHost = null, Roblox.Client._installSuccess = null, Roblox.Client._CLSID = null, Roblox.Client._continuation = null, Roblox.Client._skip = null, Roblox.Client._isIDE = null, Roblox.Client._isRobloxBrowser = null, Roblox.Client._isPlaceLaunch = !1, Roblox.Client._silentModeEnabled = !1, Roblox.Client._bringAppToFrontEnabled = !1, Roblox.Client._numLocks = 0, Roblox.Client._logTiming = !1, Roblox.Client._logStartTime = null, Roblox.Client._logEndTime = null, Roblox.Client._hiddenModeEnabled = !1, Roblox.Client._runInstallABTest = function() {}, Roblox.Client.ReleaseLauncher = function(n, t, i) { + if (t && Roblox.Client._numLocks--, (i || Roblox.Client._numLocks <= 0) && (n != null && (document.getElementById("pluginObjDiv").innerHTML = "", n = null), Roblox.Client._numLocks = 0), Roblox.Client._logTiming) { + Roblox.Client._logEndTime = new Date; + var r = Roblox.Client._logEndTime.getTime() - Roblox.Client._logStartTime.getTime(); + console && console.log && console.log("Roblox.Client: " + r + "ms from Create to Release.") + } +}, Roblox.Client.GetInstallHost = function(n) { + if (window.ActiveXObject) return n.InstallHost; + var t = n.Get_InstallHost(); + return t.match(/roblox.com$/) ? t : t.substring(0, t.length - 1) +}, Roblox.Client.CreateLauncher = function(n) { + var i, u, t, r; + Roblox.Client._logTiming && (Roblox.Client._logStartTime = new Date), n && Roblox.Client._numLocks++, (Roblox.Client._installHost == null || Roblox.Client._CLSID == null) && typeof initClientProps == "function" && initClientProps(), i = document.getElementById("robloxpluginobj"), u = $("#pluginObjDiv"), i || (Roblox.Client._hiddenModeEnabled = !1, window.ActiveXObject ? (t = 'Failed to INIT Plugin', $(u).append(t)) : (t = '', t += "

You need Our Plugin for this. Get the latest version from", t += 'here.

', $(u).append(t)), i = document.getElementById("robloxpluginobj")); + try { + if (i || (typeof console.log == "undefined" ? alert("Plugin installation failed!") : console.log("Plugin installation failed!")), i.Hello(), r = Roblox.Client.GetInstallHost(i), !r || r != Roblox.Client._installHost) throw "wrong InstallHost: (plugins): " + r + " (servers): " + Roblox.Client._installHost; + return i + } catch (f) { + return Roblox.Client.ReleaseLauncher(i, n, !1), null + } +}, Roblox.Client.isIDE = function() { + if (Roblox.Client._isIDE == null && (Roblox.Client._isIDE = !1, Roblox.Client._isRobloxBrowser = !1, window.external)) try { + window.external.IsRobloxAppIDE !== undefined && (Roblox.Client._isIDE = window.external.IsRobloxAppIDE, Roblox.Client._isRobloxBrowser = !0) + } catch (n) {} + return Roblox.Client._isIDE +}, Roblox.Client.isRobloxBrowser = function() { + return Roblox.Client.isIDE(), Roblox.Client._isRobloxBrowser +}, Roblox.Client.robloxBrowserInstallHost = function() { + if (window.external) try { + return window.external.InstallHost + } catch (n) {} + return "" +}, Roblox.Client.IsRobloxProxyInstalled = function() { + var t = Roblox.Client.CreateLauncher(!1), + n = !1; + return (t != null && (n = !0), Roblox.Client.ReleaseLauncher(t, !1, !1), n || Roblox.Client.isRobloxBrowser()) ? !0 : !1 +}, Roblox.Client.IsRobloxInstalled = function() { + try { + var t = Roblox.Client.CreateLauncher(!1), + n = Roblox.Client.GetInstallHost(t); + return Roblox.Client.ReleaseLauncher(t, !1, !1), n == Roblox.Client._installHost + } catch (i) { + return Roblox.Client.isRobloxBrowser() ? (n = Roblox.Client.robloxBrowserInstallHost(), n == Roblox.Client._installHost) : !1 + } +}, Roblox.Client.SetStartInHiddenMode = function(n) { + try { + var t = Roblox.Client.CreateLauncher(!1); + if (t !== null) return t.SetStartInHiddenMode(n), Roblox.Client._hiddenModeEnabled = n, !0 + } catch (i) {} + return !1 +}, Roblox.Client.UnhideApp = function() { + try { + if (Roblox.Client._hiddenModeEnabled) { + var n = Roblox.Client.CreateLauncher(!1); + n.UnhideApp() + } + } catch (t) {} +}, Roblox.Client.Update = function() { + try { + var n = Roblox.Client.CreateLauncher(!1); + n.Update(), Roblox.Client.ReleaseLauncher(n, !1, !1) + } catch (t) { + alert("Error updating: " + t) + } +}, Roblox.Client.WaitForRoblox = function(n) { + if (Roblox.Client._skip) return window.location = Roblox.Client._skip, !1; + if (Roblox.Client._continuation = n, Roblox.Client._cancelled = !1, !Roblox.Client.IsRobloxProxyInstalled() && Roblox.Client.ImplementsProxy) { + Roblox.InstallationInstructions.show(), Roblox.Client.runInstallABTest(); + var t = "Windows"; + return navigator.appVersion.indexOf("Mac") != -1 && (t = "Mac"), typeof _gaq != typeof undefined && (_gaq.push(["_trackEvent", "Install Begin", t]), _gaq.push(["b._trackEvent", "Install Begin", t])), RobloxEventManager.triggerEvent("rbx_evt_install_begin", { + os: t + }), window.chrome && (window.location.hash = "#chromeInstall", $.cookie("chromeInstall", n.toString().replace(/play_placeId/, play_placeId.toString()))), window.setTimeout(function() { + Roblox.Client._ontimer() + }, 1e3), tryToDownload(), !0 + } + return Roblox.Client._continuation(), !1 +}, Roblox.Client.ResumeTimer = function(n) { + Roblox.Client._continuation = n, Roblox.Client._cancelled = !1, window.setTimeout(function() { + Roblox.Client._ontimer() + }, 0) +}, Roblox.Client.Refresh = function() { + try { + navigator.plugins.refresh(!1) + } catch (n) {} +}, Roblox.Client._onCancel = function() { + return Roblox.InstallationInstructions.hide(), Roblox.Client._cancelled = !0, !1 +}, Roblox.Client._ontimer = function() { + Roblox.Client._cancelled || (Roblox.Client.Refresh(), Roblox.Client.IsRobloxProxyInstalled() ? (Roblox.InstallationInstructions.hide(), window.setTimeout(function() { + window.chrome && window.location.hash == "#chromeInstall" && (window.location.hash = "", $.cookie("chromeInstall", null)) + }, 5e3), Roblox.Client._continuation(), Roblox.Client._installSuccess && Roblox.Client._installSuccess()) : window.setTimeout(function() { + Roblox.Client._ontimer() + }, 1e3)) +}; + +; /// InstallationInstructions.js +typeof Roblox == "undefined" && (Roblox = {}), Roblox.InstallationInstructions = function() { + function i() { + var t, i, r; + n(), t = 0, i = $(".InstallInstructionsImage"), i && typeof $(i).attr("modalwidth") != "undefined" && (t = $(".InstallInstructionsImage").attr("modalwidth")), t > 0 ? (r = ($(window).width() - (t - 10)) / 2, $("#InstallationInstructions").modal({ + escClose: !0, + opacity: 50, + minWidth: t, + maxWidth: t, + overlayCss: { + backgroundColor: "#000" + }, + position: [20, r] + })) : $("#InstallationInstructions").modal({ + escClose: !0, + opacity: 50, + maxWidth: $(window).width() / 2, + minWidth: $(window).width() / 2, + overlayCss: { + backgroundColor: "#000" + }, + position: [20, "25%"] + }) + } + + function r() { + $.modal.close() + } + + function n() { + var n = $(".InstallInstructionsImage"); + navigator.userAgent.match(/Mac OS X 10[_|\.]5/) ? n && typeof $(n).attr("oldmacdelaysrc") != "undefined" && $(".InstallInstructionsImage").attr("src", $(".InstallInstructionsImage").attr("oldmacdelaysrc")) : n && typeof $(n).attr("delaysrc") != "undefined" && $(".InstallInstructionsImage").attr("src", $(".InstallInstructionsImage").attr("delaysrc")) + } + return { + show: i, + hide: r + } +}(); + +; /// MadStatus.js +MadStatus = { + running: !1, + init: function(n, t, i, r) { + MadStatus.running && MadStatus.stop(), MadStatus.updateInterval = i ? i : 2e3, MadStatus.fadeInterval = r ? r : 1e3, MadStatus.timeout = null, MadStatus.running = !0, MadStatus.field = n, MadStatus.backBuffer = t, MadStatus.field.show(), MadStatus.backBuffer.hide() + }, + participle: ["Accelerating", "Aggregating", "Allocating", "Aquiring", "Automating", "Backtracing", "Bloxxing", "Bootstraping", "Calibrating", "Correlating", "De-noobing", "De-ionizing", "Deriving", "Energizing", "Filtering", "Generating", "Indexing", "Loading", "Noobing", "Optimizing", "Oxidizing", "Queueing", "Parsing", "Processing", "Rasterizing", "Reading", "Registering", "Re-routing", "Resolving", "Sampling", "Updating", "Writing"], + modifier: ["Blox", "Count Zero", "Cylon", "Data", "Ectoplasm", "Encryption", "Event", "Farnsworth", "Bebop", "Flux Capacitor", "Fusion", "Game", "Gibson", "Host", "Mainframe", "Metaverse", "Nerf Herder", "Neutron", "Noob", "Photon", "Profile", "Script", "Skynet", "TARDIS", "Virtual"], + subject: ["Analogs", "Blocks", "Cannon", "Channels", "Core", "Database", "Dimensions", "Directives", "Engine", "Files", "Gear", "Index", "Layer", "Matrix", "Paradox", "Parameters", "Parsecs", "Pipeline", "Players", "Ports", "Protocols", "Reactors", "Sphere", "Spooler", "Stream", "Switches", "Table", "Targets", "Throttle", "Tokens", "Torpedoes", "Tubes"], + newLib: function() { + return libString = this.participle[Math.floor(Math.random() * this.participle.length)] + " " + this.modifier[Math.floor(Math.random() * this.modifier.length)] + " " + this.subject[Math.floor(Math.random() * this.subject.length)] + "..." + }, + start: function() { + MadStatus.timeout == null && (MadStatus.timeout = setInterval("MadStatus.update()", MadStatus.updateInterval), MadStatus.running = !0) + }, + stop: function(n) { + clearInterval(MadStatus.timeout), MadStatus.timeout = null, MadStatus.field[0].innerHTML = typeof n != typeof undefined ? n : "", MadStatus.running = !1 + }, + manualUpdate: function(n, t, i) { + MadStatus.timeout && MadStatus.stop(), this.update(n, i), t && setTimeout("MadStatus.start()", 1e3) + }, + update: function(n, t) { + (MadStatus.backBuffer[0].innerHTML = typeof n != typeof undefined ? n : this.newLib(), typeof noAnim == typeof undefined || t != !1) && (this.field.hide(), this.backBuffer.fadeIn(this.fadeInterval + 2, function() { + MadStatus.field[0].innerHTML = MadStatus.backBuffer[0].innerHTML, MadStatus.field.show(), MadStatus.backBuffer.hide() + })) + } +}; + +; /// PlaceLauncher.js +var RBX = {}, + RobloxLaunchStates = { + StartingServer: "StartingServer", + StartingClient: "StartingClient", + Upgrading: "Upgrading", + None: "None" + }, + RobloxLaunch = { + launchGamePage: null, + timer: null, + clientMetricType: null, + launcher: null, + googleAnalyticsCallback: function() { + RobloxLaunch._GoogleAnalyticsCallback && RobloxLaunch._GoogleAnalyticsCallback() + }, + state: RobloxLaunchStates.None, + secureAuthenticate: !1 + }, + RobloxPlaceLauncherService = { + LogJoinClick: function() { + $.get("/Game/Placelauncher.ashx", { + request: "LogJoinClick" + }) + }, + RequestGame: function(n, t, i, r, u, f) { + i = i !== null && i !== undefined ? i : "", $.getJSON("/Game/PlaceLauncher.ashx", { + request: "RequestGame", + placeId: n, + isPartyLeader: t, + gender: i + }, function(n) { + n.Error ? u(n.Error, f) : r(n, f) + }) + }, + RequestPlayWithParty: function(n, t, i, r, u, f) { + $.getJSON("/Game/PlaceLauncher.ashx", { + request: "RequestPlayWithParty", + placeId: n, + partyGuid: t, + gameId: i + }, function(n) { + n.Error ? u(n.Error, f) : r(n, f) + }) + }, + RequestGroupBuildGame: function(n, t, i, r) { + $.getJSON("/Game/PlaceLauncher.ashx", { + request: "RequestGroupBuildGame", + placeId: n + }, function(n) { + n.Error ? i(n.Error, r) : t(n, r) + }) + }, + RequestFollowUser: function(n, t, i, r) { + $.getJSON("/Game/PlaceLauncher.ashx", { + request: "RequestFollowUser", + userId: n + }, function(n) { + n.Error ? i(n.Error, r) : t(n, r) + }) + }, + RequestGameJob: function(n, t, i, r, u, f) { + $.getJSON("/Game/PlaceLauncher.ashx", { + request: "RequestGameJob", + placeId: n, + gameId: t, + gameJobId: i + }, function(n) { + n.Error ? u(n.Error, f) : r(n, f) + }) + }, + CheckGameJobStatus: function(n, t, i, r) { + $.getJSON("/Game/PlaceLauncher.ashx", { + request: "CheckGameJobStatus", + jobId: n + }, function(n) { + n.Error ? i(n.Error, r) : t(n, r) + }) + } + }; +RobloxLaunch.RequestPlayWithParty = function(n, t, i, r) { + RobloxPlaceLauncherService.LogJoinClick(), RobloxLaunch.timer = new Date, RobloxLaunch.state = RobloxLaunchStates.None, RobloxLaunch.clientMetricType = "WebPlay", checkRobloxInstall() && (RobloxLaunch.launcher === null && (RobloxLaunch.launcher = new RBX.PlaceLauncher(n)), RobloxLaunch.launcher.RequestPlayWithParty(t, i, r)) +}, RobloxLaunch.RequestGame = function(n, t, i) { + RobloxPlaceLauncherService.LogJoinClick(), RobloxLaunch.timer = new Date, RobloxLaunch.state = RobloxLaunchStates.None, RobloxLaunch.clientMetricType = "WebPlay", checkRobloxInstall() && (RobloxLaunch.launcher === null && (RobloxLaunch.launcher = new RBX.PlaceLauncher(n)), RobloxLaunch.launcher.RequestGame(t, i)) +}, RobloxLaunch.RequestGroupBuildGame = function(n, t) { + RobloxPlaceLauncherService.LogJoinClick(), RobloxLaunch.timer = new Date, RobloxLaunch.state = RobloxLaunchStates.None, RobloxLaunch.clientMetricType = "WebPlay", checkRobloxInstall() && (RobloxLaunch.launcher === null && (RobloxLaunch.launcher = new RBX.PlaceLauncher(n)), RobloxLaunch.launcher.RequestGroupBuildGame(t)) +}, RobloxLaunch.RequestGameJob = function(n, t, i, r) { + RobloxPlaceLauncherService.LogJoinClick(), RobloxLaunch.timer = new Date, RobloxLaunch.state = RobloxLaunchStates.None, RobloxLaunch.clientMetricType = "WebJoin", checkRobloxInstall() && (RobloxLaunch.launcher === null && (RobloxLaunch.launcher = new RBX.PlaceLauncher(n)), RobloxLaunch.launcher.RequestGameJob(t, i, r)) +}, RobloxLaunch.RequestFollowUser = function(n, t) { + RobloxPlaceLauncherService.LogJoinClick(), RobloxLaunch.timer = new Date, RobloxLaunch.state = RobloxLaunchStates.None, RobloxLaunch.clientMetricType = "WebFollow", checkRobloxInstall() && (RobloxLaunch.launcher === null && (RobloxLaunch.launcher = new RBX.PlaceLauncher(n)), RobloxLaunch.launcher.RequestFollowUser(t)) +}, RobloxLaunch.StartGame = function(n, t, i, r, u) { + var o, f, e, s; + RobloxLaunch.secureAuthenticate && (i = i.replace("http://", "https://")), n = typeof RobloxLaunch.SeleniumTestMode == "undefined" ? n + "&testmode=false" : n + "&testmode=true", typeof urchinTracker != "undefined" && urchinTracker("Visit/Try/" + t), RobloxLaunch.state = RobloxLaunchStates.StartingClient, RobloxLaunch.googleAnalyticsCallback !== null && RobloxLaunch.googleAnalyticsCallback(), o = null; + try { + if (typeof window.external != "undefined" && window.external.IsRobloxABApp) window.external.StartGame(r, i, n); + else if (typeof window.external != "undefined" && window.external.IsRoblox2App && (n.indexOf("visit") != -1 || u)) window.external.StartGame(r, i, n); + else if (o = "RobloxProxy/", f = Roblox.Client.CreateLauncher(!0), f) { + o = "RobloxProxy/StartGame/"; + try { + try { + window.ActiveXObject ? f.AuthenticationTicket = r : f.Put_AuthenticationTicket(r), u && f.SetEditMode() + } catch (a) {} + try { + if (Roblox.Client._silentModeEnabled) f.SetSilentModeEnabled(!0), Roblox.VideoPreRoll.videoInitialized && Roblox.VideoPreRoll.isPlaying() && Roblox.Client.SetStartInHiddenMode(!0), f.StartGame(i, n), RobloxLaunch.CheckGameStarted(f); + else throw "silent mode is disabled, fall back"; + } catch (a) { + if (f.StartGame(i, n), Roblox.Client._bringAppToFrontEnabled) try { + f.BringAppToFront() + } catch (h) {} + Roblox.Client.ReleaseLauncher(f, !0, !1), $.modal.close() + } + } catch (a) { + Roblox.Client.ReleaseLauncher(f, !0, !1); + throw a; + } + } else { + try { + parent.playFromUrl(n); + return + } catch (l) {} + if (Roblox.Client.isRobloxBrowser()) try { + window.external.StartGame(r, i, n) + } catch (l) { + throw "window.external fallback failed, Roblox must not be installed or IE cannot access ActiveX"; + } else throw "launcher is null or undefined and external is missing"; + RobloxLaunch.state = RobloxLaunchStates.None, $.modal.close() + } + } catch (a) { + if (e = a.message, e === "User cancelled" && typeof urchinTracker != "undefined") return urchinTracker("Visit/UserCancelled/" + t), !1; + try { + s = new ActiveXObject("Microsoft.XMLHTTP") + } catch (c) { + e = "FailedXMLHTTP/" + e + } + return Roblox.Client.isRobloxBrowser() ? typeof urchinTracker != "undefined" && urchinTracker("Visit/Fail/" + o + encodeURIComponent(e)) : (typeof urchinTracker != "undefined" && urchinTracker("Visit/Redirect/" + o + encodeURIComponent(e)), window.location = RobloxLaunch.launchGamePage), !1 + } + return typeof urchinTracker != "undefined" && urchinTracker("Visit/Success/" + t), !0 +}, RobloxLaunch.CheckGameStarted = function(n) { + function r() { + var e = !1; + try { + if (i || (i = window.ActiveXObject ? n.IsGameStarted : n.Get_GameStarted()), i && !Roblox.VideoPreRoll.isPlaying()) { + if (MadStatus.stop("Connecting to Players..."), RobloxLaunch.state = RobloxLaunchStates.None, $.modal.close(), t._cancelled = !0, Roblox.Client._hiddenModeEnabled && Roblox.Client.UnhideApp(), Roblox.Client._bringAppToFrontEnabled) try { + n.BringAppToFront() + } catch (f) {} + Roblox.Client.ReleaseLauncher(n, !0, !1) + } else t._cancelled || setTimeout(r, 1e3) + } catch (u) { + t._cancelled || setTimeout(r, 1e3) + } + } + var t = RobloxLaunch.launcher, + i; + t === null && (t = new RBX.PlaceLauncher("PlaceLauncherStatusPanel"), t._showDialog(), t._updateStatus(0)), i = !1, r() +}, RobloxLaunch.CheckRobloxInstall = function(n) { + if (Roblox.Client.IsRobloxInstalled()) return Roblox.Client.Update(), !0; + window.location = n +}, RBX.PlaceLauncher = function(n) { + this._cancelled = !1, this._popupID = n, this._popup = $("#" + n) +}, RBX.PlaceLauncher.prototype = { + _showDialog: function() { + this._cancelled = !1, _popupOptions = { + escClose: !0, + opacity: 80, + overlayCss: { + backgroundColor: "#000" + } + }, this._popupID == "PlaceLauncherStatusPanel" && (Roblox.VideoPreRoll && Roblox.VideoPreRoll.showVideoPreRoll && !Roblox.VideoPreRoll.isExcluded() ? (this._popup = $("#videoPrerollPanel"), _popupOptions.onShow = function(n) { + Roblox.VideoPreRoll.correctIEModalPosition(n), Roblox.VideoPreRoll.start() + }, _popupOptions.onClose = function() { + Roblox.VideoPreRoll.close() + }, _popupOptions.closeHTML = '') : (this._popup = $("#" + this._popupID), _popupOptions.onClose = function() { + Roblox.VideoPreRoll.logVideoPreRoll(), $.modal.close() + })), this._popup.modal(_popupOptions); + var n = this; + $(".CancelPlaceLauncherButton").click(function() { + n.CancelLaunch() + }), $(".CancelPlaceLauncherButton").show() + }, + _reportDuration: function(n, t) { + $.ajax({ + type: "GET", + async: !0, + cache: !1, + timeout: 5e4, + url: "/Game/JoinRate.ashx?c=" + RobloxLaunch.clientMetricType + "&r=" + t + "&d=" + n, + success: function() {} + }) + }, + _onGameStatus: function(n) { + var r, i, t; + if (this._cancelled) { + r = +new Date - RobloxLaunch.timer.getTime(), this._reportDuration(r, "Cancel"); + return + } + if (this._updateStatus(n.status), n.status === 2) RobloxLaunch.StartGame(n.joinScriptUrl, "Join", n.authenticationUrl, n.authenticationTicket), i = +new Date - RobloxLaunch.timer.getTime(), this._reportDuration(i, "Success"); + else if (n.status < 2 || n.status === 6) { + var f = function(n, t) { + t._onGameStatus(n) + }, + e = function(n, t) { + t._onGameError(n) + }, + o = this, + u = function() { + RobloxPlaceLauncherService.CheckGameJobStatus(n.jobId, f, e, o) + }; + window.setTimeout(u, 2e3) + } else n.status === 4 && (t = +new Date - RobloxLaunch.timer.getTime(), this._reportDuration(t, "Failure")) + }, + _updateStatus: function(n) { + MadStatus.running || (MadStatus.init($(this._popup).find(".MadStatusField"), $(this._popup).find(".MadStatusBackBuffer"), 2e3, 800), MadStatus.start()); + switch (n) { + case 0: + break; + case 1: + MadStatus.manualUpdate("A server is loading the game...", !0); + break; + case 2: + MadStatus.manualUpdate("The server is ready. Joining the game...", !0); + break; + case 3: + MadStatus.manualUpdate("Joining games is temporarily disabled while we upgrade. Please try again soon.", !1); + break; + case 4: + MadStatus.manualUpdate("An error occurred. Please try again later.", !1); + break; + case 5: + MadStatus.manualUpdate("The game you requested has ended.", !1); + break; + case 6: + MadStatus.manualUpdate("The game you requested is currently full. Waiting for an opening...", !0, !1); + break; + case 7: + MadStatus.manualUpdate("Roblox is updating. Please wait...", !0); + break; + case 8: + MadStatus.manualUpdate("Requesting a server", !0); + break; + default: + MadStatus.stop("Connecting to Players...") + } + $(this._popup).find(".MadStatusStarting").css("display", "none"), $(this._popup).find(".MadStatusSpinner").css("visibility", n === 3 || n === 4 || n === 5 ? "hidden" : "visible") + }, + _onGameError: function() { + this._updateStatus(4) + }, + _startUpdatePolling: function(n) { + var t, i; + try { + if (RobloxLaunch.state = RobloxLaunchStates.Upgrading, t = Roblox.Client.CreateLauncher(!0), i = window.ActiveXObject ? t.IsUpToDate : t.Get_IsUpToDate(), i || i === undefined) { + try { + t.PreStartGame() + } catch (e) {} + Roblox.Client.ReleaseLauncher(t, !0, !1), RobloxLaunch.state = RobloxLaunchStates.StartingServer, n(); + return + } + var f = function(t, i, r) { + r._onUpdateStatus(t, i, n) + }, + u = function(n, t) { + t._onUpdateError(n) + }, + r = this; + this.CheckUpdateStatus(f, u, t, n, r) + } catch (e) { + Roblox.Client.ReleaseLauncher(t, !0, !1), n() + } + }, + _onUpdateStatus: function(n, t, i) { + if (!this._cancelled) + if (this._updateStatus(n), n === 8) Roblox.Client.ReleaseLauncher(t, !0, !0), Roblox.Client.Refresh(), RobloxLaunch.state = RobloxLaunchStates.StartingServer, i(); + else if (n === 7) { + var f = function(n, t, r) { + r._onUpdateStatus(n, t, i) + }, + e = function(n, t) { + t._onUpdateError(n) + }, + r = this, + u = function() { + r.CheckUpdateStatus(f, e, t, i, r) + }; + window.setTimeout(u, 2e3) + } else alert("Unknown status from CheckUpdateStatus") + }, + _onUpdateError: function() { + this._updateStatus(2) + }, + CheckUpdateStatus: function(n, t, i, r, u) { + try { + if (i.PreStartGame(), window.ActiveXObject) var f = i.IsUpToDate; + else f = i.Get_IsUpToDate(); + f || f === undefined ? n(8, i, u) : n(7, i, u) + } catch (e) { + n(8, i, u) + } + }, + RequestGame: function(n, t) { + var r; + this._showDialog(); + var f = function(n, t) { + t._onGameStatus(n) + }, + u = function(n, t) { + t._onGameError(n) + }, + e = this, + i = !1; + return typeof Party != "undefined" && typeof Party.AmILeader == "function" && (i = Party.AmILeader()), r = function() { + RobloxPlaceLauncherService.RequestGame(n, i, t, f, u, e) + }, this._startUpdatePolling(r), !1 + }, + RequestPlayWithParty: function(n, t, i) { + this._showDialog(); + var f = function(n, t) { + t._onGameStatus(n) + }, + e = function(n, t) { + t._onGameError(n) + }, + r = this, + u = function() { + RobloxPlaceLauncherService.RequestPlayWithParty(n, t, i, f, e, r) + }; + return this._startUpdatePolling(u), !1 + }, + RequestGroupBuildGame: function(n) { + this._showDialog(); + var r = function(n, t) { + t._onGameStatus(n, !0) + }, + u = function(n, t) { + t._onGameError(n) + }, + t = this, + i = function() { + RobloxPlaceLauncherService.RequestGroupBuildGame(n, r, u, t) + }; + return this._startUpdatePolling(i), !1 + }, + RequestFollowUser: function(n) { + this._showDialog(); + var r = function(n, t) { + t._onGameStatus(n) + }, + u = function(n, t) { + t._onError(n) + }, + t = this, + i = function() { + RobloxPlaceLauncherService.RequestFollowUser(n, r, u, t) + }; + return this._startUpdatePolling(i), !1 + }, + RequestGameJob: function(n, t, i) { + this._showDialog(); + var f = function(n, t) { + t._onGameStatus(n) + }, + e = function(n, t) { + t._onGameError(n) + }, + r = this, + u = function() { + RobloxPlaceLauncherService.RequestGameJob(n, t, i, f, e, r) + }; + return this._startUpdatePolling(u), !1 + }, + CancelLaunch: function() { + return this._cancelled = !0, $.modal.close(), !1 + }, + dispose: function() { + RBX.PlaceLauncher.callBaseMethod(this, "dispose") + } +}; + +; /// VideoPreRoll.js +function openVideoPreroll2(n) { + Roblox.VideoPreRoll.test(n) +} + +function flashCheck(n) { + var i = !1, + t, r; + if (window.ActiveXObject) try { + t = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + n), i = !0 + } catch (u) {} else navigator.plugins && navigator.mimeTypes.length > 0 && (t = navigator.plugins["Shockwave Flash"], t && (r = navigator.plugins["Shockwave Flash"].description.replace(/.*\s(\d+\.\d+).*/, "$1"), r >= n && (i = !0))); + return i +} +typeof Roblox == "undefined" && (Roblox = {}), Roblox.VideoPreRoll = { + newValue: "", + showVideoPreRoll: !1, + videoInitialized: !1, + videoStarted: !1, + videoCompleted: !1, + videoSkipped: !1, + videoCancelled: !1, + videoErrored: !1, + videoOptions: { + key: "integration_test", + companionId: "videoPrerollCompanionAd" + }, + myvpaidad: null, + loadingBarMaxTime: 3e4, + loadingBarCurrentTime: 0, + loadingBarIntervalID: 0, + loadingBarID: "videoPrerollLoadingBar", + loadingBarInnerID: "videoPrerollLoadingBarCompleted", + loadingBarPercentageID: "videoPrerollLoadingPercent", + videoLoadingTimeout: 7e3, + videoPlayingTimeout: 23e3, + videoLogNote: "", + logsEnabled: !1, + excludedPlaceIds: "", + specificAdOnPlacePageEnabled: !1, + specificAdOnPlacePageId: 0, + specificAdOnPlacePageCategory: "", + checkEligibility: function() { + Roblox.VideoPreRoll.showVideoPreRoll && (flashCheck(8) ? typeof __adaptv__ == "undefined" ? (Roblox.VideoPreRoll.videoLogNote = "NoAdapTv", Roblox.VideoPreRoll.showVideoPreRoll = !1) : Roblox.Client.IsRobloxInstalled() ? Roblox.Client.isIDE() ? (Roblox.VideoPreRoll.videoLogNote = "RobloxStudio", Roblox.VideoPreRoll.showVideoPreRoll = !1) : Roblox.Client.isRobloxBrowser() ? (Roblox.VideoPreRoll.videoLogNote = "RobloxPlayer", Roblox.VideoPreRoll.showVideoPreRoll = !1) : window.chrome && window.location.hash == "#chromeInstall" && (Roblox.VideoPreRoll.showVideoPreRoll = !1) : Roblox.VideoPreRoll.showVideoPreRoll = !1 : (Roblox.VideoPreRoll.videoLogNote = "NoFlash", Roblox.VideoPreRoll.showVideoPreRoll = !1)) + }, + isExcluded: function() { + var t, n; + if (Roblox.VideoPreRoll.showVideoPreRoll && Roblox.VideoPreRoll.excludedPlaceIds !== "" && (t = Roblox.VideoPreRoll.excludedPlaceIds.split(","), typeof play_placeId != "undefined")) + for (n = 0; n < t.length; n++) + if (play_placeId == t[n]) return Roblox.VideoPreRoll.videoLogNote = "ExcludedPlace", !0; + return !1 + }, + start: function() { + var i, r, t, n; + this.videoInitialized = !0, this.videoStarted = !1, this.videoCancelled = !1, this.videoCompleted = !1, this.videoSkipped = !1, this.loadingBarCurrentTime = 0, this.videoLogNote = "", Roblox.VideoPreRoll.specificAdOnPlacePageEnabled && typeof play_placeId != "undefined" && (i = "," + Roblox.VideoPreRoll.specificAdOnPlacePageCategory, play_placeId == Roblox.VideoPreRoll.specificAdOnPlacePageId && Roblox.VideoPreRoll.videoOptions.categories.indexOf(i) == -1 && (Roblox.VideoPreRoll.videoOptions.categories += i)), r = __adaptv__, this.myvpaidad = new r.ads.vpaid.VPAIDAd("videoPrerollMainDiv"), t = 1e3, LoadingBar.init(this.loadingBarID, this.loadingBarInnerID, this.loadingBarPercentageID), this.loadingBarIntervalID = setInterval(function() { + Roblox.VideoPreRoll.loadingBarCurrentTime += t, LoadingBar.update(Roblox.VideoPreRoll.loadingBarID, Roblox.VideoPreRoll.loadingBarCurrentTime / Roblox.VideoPreRoll.loadingBarMaxTime) + }, t), n = r.ads.vpaid.VPAIDEvent; + this.myvpaidad.on(n.AdLoaded, function(n) { + Roblox.VideoPreRoll._onVideoLoaded(n) + }); + this.myvpaidad.on(n.AdStarted, function(n) { + Roblox.VideoPreRoll._onVideoStart(n) + }); + this.myvpaidad.on(n.AdStopped, function(n) { + Roblox.VideoPreRoll._onVideoComplete(n) + }); + this.myvpaidad.on(n.AdError, function(n) { + Roblox.VideoPreRoll._onVideoError(n) + }); + try { + this.myvpaidad.initAd(391, 312, this.videoOptions) + } catch (u) { + f() + } + }, + error: function() { + clearInterval(loadingBarInterval) + }, + cancel: function() { + this.videoCancelled = !0, $.modal.close() + }, + skip: function() { + this.videoCompleted = !0, this.videoSkipped = !0, this.showVideoPreRoll = !1 + }, + close: function() { + MadStatus.running && MadStatus.stop(""), RobloxLaunch.launcher && (RobloxLaunch.launcher._cancelled = !0), clearInterval(this.loadingBarIntervalID), LoadingBar.dispose(this.loadingBarID); + try { + this.myvpaidad.stopAd() + } catch (n) {} + this.isPlaying() && (this.videoCancelled = !0), $.modal.close(), this.logVideoPreRoll() + }, + _onVideoError: function f() { + this.videoCompleted = !0, this.videoErrored = !0 + }, + _onVideoLoaded: function(n) { + try { + this.myvpaidad.startAd() + } catch (t) { + f(n) + } + }, + _onVideoStart: function() { + this.videoStarted = !0 + }, + _onVideoComplete: function() { + this.videoStarted && this.videoCancelled == !1 && (this.videoCompleted = !0, this.showVideoPreRoll = !1, this.newValue != "" && $.cookie("RBXVPR", this.newValue, 180)) + }, + logVideoPreRoll: function() { + if (Roblox.VideoPreRoll.logsEnabled) { + var n = ""; + if (Roblox.VideoPreRoll.videoCompleted) n = "Complete", Roblox.VideoPreRoll.videoLogNote == "" && (Roblox.VideoPreRoll.videoLogNote = "NoTimeout"), Roblox.VideoPreRoll.logsEnabled = !1; + else if (Roblox.VideoPreRoll.videoCancelled) n = "Cancelled", Roblox.VideoPreRoll.videoLogNote = RobloxLaunch.state; + else if (Roblox.VideoPreRoll.videoInitialized == !1 && Roblox.VideoPreRoll.videoLogNote != "") n = "Failed", Roblox.VideoPreRoll.logsEnabled = !1; + else return; + GoogleAnalyticsEvents.FireEvent(["PreRoll", n, Roblox.VideoPreRoll.videoLogNote]) + } + }, + isPlaying: function() { + return Roblox.VideoPreRoll.videoInitialized ? (Roblox.VideoPreRoll.videoInitialized && !Roblox.VideoPreRoll.videoStarted && Roblox.VideoPreRoll.loadingBarCurrentTime > Roblox.VideoPreRoll.videoLoadingTimeout && (Roblox.VideoPreRoll.videoCompleted = !0, Roblox.VideoPreRoll.videoLogNote = "LoadingTimeout"), Roblox.VideoPreRoll.videoStarted && !Roblox.VideoPreRoll.videoCompleted && Roblox.VideoPreRoll.loadingBarCurrentTime > Roblox.VideoPreRoll.videoPlayingTimeout && (Roblox.VideoPreRoll.videoCompleted = !0, Roblox.VideoPreRoll.videoLogNote = "PlayingTimeout"), !Roblox.VideoPreRoll.videoCompleted) : !1 + }, + correctIEModalPosition: function(n) { + if (n.container.innerHeight() <= 30) { + var i = $("#videoPrerollPanel"), + t = -Math.floor(i.innerHeight() / 2); + i.css({ + position: "relative", + top: t + "px" + }), n.container.find(".VprCloseButton").css({ + top: t - 10 + "px", + "z-index": "1003" + }) + } + }, + test: function() { + _popupOptions = { + escClose: !0, + opacity: 80, + overlayCss: { + backgroundColor: "#000" + }, + onShow: function(n) { + Roblox.VideoPreRoll.correctIEModalPosition(n), Roblox.VideoPreRoll.start() + }, + onClose: function() { + Roblox.VideoPreRoll.close() + }, + closeHTML: '' + }, $("#videoPrerollPanel").modal(_popupOptions), MadStatus.running || (MadStatus.init($("#videoPrerollPanel").find(".MadStatusField"), $("#videoPrerollPanel").find(".MadStatusBackBuffer"), 2e3, 800), MadStatus.start()), $("#videoPrerollPanel").find(".MadStatusStarting").css("display", "none"), $("#videoPrerollPanel").find(".MadStatusSpinner").css("visibility", status === 3 || status === 4 || status === 5 ? "hidden" : "visible") + } +}; +var LoadingBar = { + bars: [], + init: function(n, t, i, r) { + var u = this.get(n); + u == null && (u = {}), u.barID = n, u.innerBarID = t, u.percentageID = i, typeof r == "undefined" && (u.percentComplete = 0), this.bars.push(u), this.update(n, u.percentComplete) + }, + get: function(n) { + for (var t = 0; t < this.bars.length; t++) + if (this.bars[t].barID == n) return this.bars[t]; + return null + }, + dispose: function(n) { + for (var t = 0; t < this.bars.length; t++) this.bars[t].barID == n && this.bars.splice(t, 1) + }, + update: function(n, t) { + var i = this.get(n), + u, r; + i && (t > 1 && (t = 1), u = $("#" + n).width(), r = Math.round(u * t), $("#" + i.innerBarID).animate({ + width: r + }, 200, "swing"), i.percentageID && $("#" + i.percentageID).length > 0 && $("#" + i.percentageID).html(Math.round(t * 100) + "%"), i.percentComplete = t) + } +}; +// end roblox.js \ No newline at end of file diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js new file mode 100644 index 0000000..63605fa --- /dev/null +++ b/resources/js/bootstrap.js @@ -0,0 +1,41 @@ +window._ = require('lodash'); + +/** + * We'll load jQuery and the Bootstrap jQuery plugin which provides support + * for JavaScript based Bootstrap features such as modals and tabs. This + * code may be modified to fit the specific needs of your application. + */ + +try { + window.Popper = require('popper.js').default; + window.$ = window.jQuery = require('jquery'); + + require('bootstrap'); +} catch (e) {} + +/** + * We'll load the axios HTTP library which allows us to easily issue requests + * to our Laravel back-end. This library automatically handles sending the + * CSRF token as a header based on the value of the "XSRF" token cookie. + */ + +window.axios = require('axios'); + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; + +/** + * Echo exposes an expressive API for subscribing to channels and listening + * for events that are broadcast by Laravel. Echo and event broadcasting + * allows your team to easily build robust real-time web applications. + */ + +// import Echo from 'laravel-echo'; + +// window.Pusher = require('pusher-js'); + +// window.Echo = new Echo({ +// broadcaster: 'pusher', +// key: process.env.MIX_PUSHER_APP_KEY, +// cluster: process.env.MIX_PUSHER_APP_CLUSTER, +// forceTLS: true +// }); diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php new file mode 100644 index 0000000..6598e2c --- /dev/null +++ b/resources/lang/en/auth.php @@ -0,0 +1,20 @@ + 'These credentials do not match our records.', + 'password' => 'The provided password is incorrect.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/resources/lang/en/pagination.php b/resources/lang/en/pagination.php new file mode 100644 index 0000000..d481411 --- /dev/null +++ b/resources/lang/en/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/resources/lang/en/passwords.php b/resources/lang/en/passwords.php new file mode 100644 index 0000000..2345a56 --- /dev/null +++ b/resources/lang/en/passwords.php @@ -0,0 +1,22 @@ + 'Your password has been reset!', + 'sent' => 'We have emailed your password reset link!', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php new file mode 100644 index 0000000..49e3388 --- /dev/null +++ b/resources/lang/en/validation.php @@ -0,0 +1,155 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', + 'alpha' => 'The :attribute must only contain letters.', + 'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.', + 'alpha_num' => 'The :attribute must only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_equals' => 'The :attribute must be a date equal to :date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'email' => 'The :attribute must be a valid email address.', + 'ends_with' => 'The :attribute must end with one of the following: :values.', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'gt' => [ + 'numeric' => 'The :attribute must be greater than :value.', + 'file' => 'The :attribute must be greater than :value kilobytes.', + 'string' => 'The :attribute must be greater than :value characters.', + 'array' => 'The :attribute must have more than :value items.', + ], + 'gte' => [ + 'numeric' => 'The :attribute must be greater than or equal :value.', + 'file' => 'The :attribute must be greater than or equal :value kilobytes.', + 'string' => 'The :attribute must be greater than or equal :value characters.', + 'array' => 'The :attribute must have :value items or more.', + ], + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'lt' => [ + 'numeric' => 'The :attribute must be less than :value.', + 'file' => 'The :attribute must be less than :value kilobytes.', + 'string' => 'The :attribute must be less than :value characters.', + 'array' => 'The :attribute must have less than :value items.', + ], + 'lte' => [ + 'numeric' => 'The :attribute must be less than or equal :value.', + 'file' => 'The :attribute must be less than or equal :value kilobytes.', + 'string' => 'The :attribute must be less than or equal :value characters.', + 'array' => 'The :attribute must not have more than :value items.', + ], + 'max' => [ + 'numeric' => 'The :attribute must not be greater than :max.', + 'file' => 'The :attribute must not be greater than :max kilobytes.', + 'string' => 'The :attribute must not be greater than :max characters.', + 'array' => 'The :attribute must not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'mimetypes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'multiple_of' => 'The :attribute must be a multiple of :value.', + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute format is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'password' => 'The password is incorrect.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'prohibited' => 'The :attribute field is prohibited.', + 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', + 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'starts_with' => 'The :attribute must start with one of the following: :values.', + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'url' => 'The :attribute format is invalid.', + 'uuid' => 'The :attribute must be a valid UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/sass/_footer.scss b/resources/sass/_footer.scss new file mode 100644 index 0000000..e69de29 diff --git a/resources/sass/_variables.scss b/resources/sass/_variables.scss new file mode 100644 index 0000000..3e3a95e --- /dev/null +++ b/resources/sass/_variables.scss @@ -0,0 +1,19 @@ +// Body +$body-bg: #f8fafc; + +// Typography +$font-family-sans-serif: 'Roboto', sans-serif; +$font-size-base: 0.9rem; +$line-height-base: 1.6; + +// Colors +$blue: #3490dc; +$indigo: #6574cd; +$purple: #9561e2; +$pink: #f66d9b; +$red: #e3342f; +$orange: #f6993f; +$yellow: #ffed4a; +$green: #38c172; +$teal: #4dc0b5; +$cyan: #6cb2eb; diff --git a/resources/sass/app.scss b/resources/sass/app.scss new file mode 100644 index 0000000..6daad09 --- /dev/null +++ b/resources/sass/app.scss @@ -0,0 +1,11082 @@ +// Fonts +//@import url('https://fonts.googleapis.com/css?family=Roboto'); + +// Variables +@import 'variables'; + +// Bootstrap +//@import '~bootstrap/scss/bootstrap'; + +// FontAwesome +@import '~@fortawesome/fontawesome-free/scss/fontawesome'; +@import '~@fortawesome/fontawesome-free/scss/regular'; +@import '~@fortawesome/fontawesome-free/scss/solid'; +@import '~@fortawesome/fontawesome-free/scss/brands'; + +// Footer +@import 'footer'; + +// hacked by ray!!! +.-mb-2 { + margin-bottom: -0.5rem !important; +} + +.-mx-2, .-m-2 { + margin-left: -0.5rem !important; + margin-right: -0.5rem !important; +} + +.-my-2, .-m-2 { + margin-top: -0.5rem !important; + margin-bottom: -0.5rem !important; +} + +// Roblox CSS below +body { + font: normal 8pt/normal Verdana, sans-serif; + margin: 0; + text-transform: none; + text-decoration: none; + background: #F8FCFF url(/images/bg_gradient.jpg) repeat-x; +} + +a { + text-decoration: none; +} + +a img { + border: none; +} + +a:link, +a:visited, +a:active { + color: #00F; +} + +a:hover { + text-decoration: underline; +} + +abbr, +acronym { + cursor: help; + border-bottom: 1px dotted #000; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + padding: 0; + font-size: 100%; + font-weight: inherit; + display: inline-block; + *display: inline; +} + +pre { + white-space: pre-wrap; + white-space: -moz-pre-wrap!important; + white-space: -pre-wrap; + white-space: -o-pre-wrap; + word-wrap: break-word; +} + +input.Text { + border-color: #777; + border-style: dashed; +} + +.AdminPanel { + border-color: Orange; + border-style: dotted; + padding: 10px; +} + +.ImageButton { + cursor: pointer; + padding: 0; + border: 0; + text-decoration: none; + margin: 0; + display: inline-block; +} + +.Button { + cursor: pointer; + background-color: #fff; + border: solid 1px #333; + color: #333; + font-family: Verdana, Sans-Serif; + font-size: .9em; + padding: 3px 10px 3px 10px; + text-decoration: none; +} + +.Button:link, +.Button:visited { + border: solid 1px #777; + color: #777; +} + +.Button:hover, +.Button:active { + background-color: #6e99c9; + border: solid 1px #000; + color: #fff; +} + +.Bullet { + float: left; + margin-right: 10px; + margin-bottom: 4px; +} + +.Ads_RightSidebar { + border: solid 1px #000; + float: right; + text-align: right; + width: 160px; +} + +.Legalese { + font-size: 7pt; +} + +#Container { + margin: 0 auto; + padding: 0 10px; + border-left: 5px solid #DDD; + border-right: 5px solid #DDD; + width: 900px; + background: #e5f1fd; +} + +#Header { + margin: 0 auto; + color: White; + font: normal 12px/normal Verdana, sans-serif; + font-weight: bold; + width: 900px; + text-align: center; +} + +#Header a, +#Header a:visited, +#Header a:active { + text-decoration: none; +} + +#Header a:hover { + text-decoration: underline; +} + +#Banner { + background-image: url(/images/WoodBanner.png); + background-repeat: no-repeat; + height: 72px; + text-align: center; +} + +#Banner #Options { + float: left; + height: 72px; + position: relative; + overflow: hidden; + width: 200px; +} + +#Banner #Authentication { + top: 0; + left: 0; + padding: 4px; + position: absolute; + background: #6E99C9; +} + +#Banner #Options #Settings { + bottom: 0; + left: 0; + padding: 4px; + position: absolute; +} + +#Banner #Logo { + float: left; + margin: 7px 0; + text-align: center; + width: 293px; + height: 58px; +} + +#Banner #Alerts { + float: right; + border: 1px solid #6E99C9; + background: #FFF; + width: 203px; +} + +#Header .Navigation { + clear: both; + background-color: #6e99c9; + color: #fff; + font-family: Arial, Helvetica, sans-serif; + font-size: 12pt; + font-weight: normal; + line-height: 2em; + text-decoration: none; +} + +#AdvertisingLeaderboard { + margin: 0 auto; + margin-bottom: 5px; + text-align: center; + width: 898px; +} + +#AdvertisingSkyscraper { + border: solid 1px #000; + float: right; + text-align: right; + width: 120px; +} + +#RobloxLargeRectangleAd { + padding: 10px 0 10px 0; +} + +#MasterContainer { + background: transparent url(/images/bg_clouds.jpg) no-repeat scroll center top; + width: 100%; + overflow: auto; +} + +#Body { + width: 900px; +} + +#Footer { + font: normal 8px/normal Verdana, sans-serif; + padding: 3em 20px; + width: 860px; + text-align: center; + font-size: 13px; + margin: 0; +} + +#Footer .SEOGenreLinks { + padding: 1em 0 2em 0; + font-size: 11px; +} + +#Footer .Legalese { + color: #555; + font-size: 10px; + margin-bottom: 1em; +} + +.AdmiPanel { + border: solid 1px #000; + bottom: 20px; + height: 200px; + overflow: hidden; + right: 10px; + padding-top: 15px; + position: fixed; + width: 200px; +} + +.AdmiPanel h4 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + margin: 0; + text-align: center; +} + +.AdmiPanelExpandCollapse { + color: green; + cursor: pointer; + font-weight: bolder; + position: absolute; + right: 2px; + top: 2px; +} + +.Panel { + border: solid 1px #000; +} + +.Panel h4 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + margin: 0; + text-align: center; +} + +.MultilineTextBox { + border: dashed 2px Gray; + font-family: Verdana, Sans-Serif; + font-size: 1.2em; + line-height: 1.5em; + padding: 5px 5px; +} + +.TextBox { + border: 1px solid #ccc; + font-family: Verdana, Sans-Serif; + font-size: 1.2em; + padding: 5px; +} + +.Label { + font-weight: bold; +} + +.BigButton { + background-color: #F5CD2F; + color: #000; + height: 2.5em; + font-family: Verdana, Helvetica, Sans-Serif; + font-size: 20px; + font-weight: bold; +} + +.ErrorReporting, +.ErrorReportingThanks { + width: 500px; + margin: 16px auto 16px auto; + padding: 10px; +} + +.YesNoButtons { + text-align: right; +} + +.YesButton, +.NoButton { + background-color: #F5CD2F; + color: #000; + margin-left: 10px; +} + +.popupControl { + background-color: #fff; + border: 1px outset #fff; + position: absolute; + visibility: hidden; +} + +.ColorPickerItem { + border-color: #fff; + border-style: solid; + border-width: 2px; +} + +.ColorPickerItem:hover { + border-color: Blue; + border-style: solid; + border-width: 2px; +} + +.modalBackground { + background-color: Gray; + filter: alpha(opacity=30); + opacity: .3; +} + +.modalPopup { + background-color: #ffd; + border-width: 3px; + border-style: solid; + border-color: Gray; + padding: 3px; +} + +.newModalPopup { + padding: 3px; +} + +.GuestModePromptText { + font-size: 14px; + color: #333; + margin-left: 30px; +} + +.GuestModePromptText li { + font-weight: bolder; +} + +.PopupMenu { + background-color: #fff; + border: solid 1px #666; + padding: 10px; + z-index: 1; +} + +.PopupMenu .Button { + line-height: 2.5em; +} + +.PopupMenu .Button:hover { + background-color: #6e99c9; + color: #fff; +} + +.Attention { + color: Red; +} + +.OKCancelButton { + width: 80px; +} + +.MenuItem { + color: White; + font-size: 18px; + line-height: 2em; +} + +a.MenuItem:link, +a.MenuItem:visited, +a.MenuItem:active { + color: White; + text-decoration: none; +} + +a.MenuItem:hover { + text-decoration: underline; +} + +.Toolbox { + background-color: ButtonFace; + padding: 2px; +} + +.ToolboxItem { + border-color: Window; + border-style: solid; + border-width: 2px; + width: 52px; + height: 52px; +} + +.Grid { + background-color: White; + border-color: #CCC; + border-width: 1px; + border-style: solid; +} + +.GridHeader { + color: White; + background-color: #6E99C9; +} + +.GridItem { + color: #006; +} + +.GridItemAlt { + color: #006; + background: #EEE; +} + +.GridItem:hover { + background-color: #DDD; +} + +.GridItemAlt:hover { + background-color: #DDD; +} + +.GridFooter { + color: White; + background-color: #6E99C9; +} + +.GridPager { + color: White; + background-color: #6E99C9; + text-align: center; + font-weight: bold; +} + +.Title { + font-size: 18px; +} + +a.Title:link, +a.Title:visited, +a.Title:active { + text-decoration: none; +} + +a.Title:hover { + text-decoration: underline; +} + +.Header { + font-size: 14px; +} + +.Banner { + padding: 8px; +} + +.BannerText { + font-weight: bold; + color: white; +} + +a.BannerText:link, +a.BannerText:visited, +a.BannerText:active { + text-decoration: none; + color: white; +} + +a.BannerText:hover { + text-decoration: underline; + color: white; +} + +.PageSelector { + font-family: Verdana, Sans-Serif; + margin: 0 0 0 10px; +} + +.PageSelector label { + font-weight: bold; +} + +.DisplayFilters { + margin-right: 3px; + min-width: 0; + position: relative; +} + +.SearchBar { + background-color: #eee; + border: solid 1px #bbb; + height: 30px; + margin: -5px 0 5px 0; + padding: 0; + text-align: center; +} + +.SearchBar .SearchBox, +.SearchBar .SearchButton { + height: 30px; + margin: 0; + padding: 0; +} + +.SearchBar .TextBox { + border: solid 1px #000; + height: 19px; + margin: 2px 0 0 0; + padding: 2px 3px 0 3px; + width: 250px; +} + +.SearchLinks { + display: inline; + font-family: Verdana, Sans-Serif; + z-index: 9; +} + +.SearchLinks a span { + display: none; +} + +.SearchLinks a:hover { + border: none; + text-decoration: none; +} + +.SearchLinks a:hover span { + background-color: #6e99c9; + border-color: Gray; + border-style: ridge; + border-width: 1px; + color: white; + display: block; + font: 11px Verdana, sans-serif; + left: 15%; + line-height: 1.4em; + margin: 5px; + padding: 5px; + position: absolute; + text-align: center; + text-decoration: none; + top: 20px; + width: 60%; + z-index: 10; +} + +.SearchError { + clear: both; + margin: 2px; + float: none; + padding: 2px; + text-align: center; + color: Red; +} + +.SystemAlert { + background-color: #FFF; + text-align: center; + color: #FFF; + border: 2px solid #000; + padding: 1px; +} + +.SystemAlertText { + font-size: 16px; + font-weight: bold; + background-color: #F00; + padding: 2px; +} + +.SystemAlert a { + color: White; +} + +.Exclamation { + background: url(/images/Icons/exclamation.png) no-repeat; + height: 16px; + width: 16px; + float: left; +} + +.EmailTemplateTable { + border-collapse: collapse; +} + +.EmailTemplateH1 { + font-size: 18px; + color: #6E99C9; +} + +.EmailTemplateLogoRow { + padding: 3px; + margin-bottom: 5px; +} + +.EmailTemplateRow { + padding: 3px; + margin-bottom: 3px; + font-size: 14px; + font-family: Verdana, Helvetica, Sans-Serif; +} + +.EmailTemplateRow input { + font-size: 14px; + padding: 2px; + border: 1px solid #CCC; +} + +.EmailTemplateRow input:hover { + font-size: 14px; + padding: 2px; + border: 1px solid #CCC; + background: #6E99C9; +} + +.subMenu { + background: #A3514F; + background-repeat: repeat-x; + color: White; + font-family: Arial, Helvetica, Sans-Serif; + font-size: 14px; + height: 26px; + position: relative; + border-left: solid 3px #6E99C9; + border-right: solid 3px #6E99C9; + border-bottom: solid 3px #6E99C9; + z-index: 5; +} + +.subMenu ul { + padding: 0; + margin: 0; + list-style-type: none; +} + +.subMenu li { + float: left; + position: relative; +} + +.subMenu a, +.subMenu a:visited { + display: block; + padding: 5px; + border-right: 1px solid #FFF; + font-size: 14px; + color: #FFF; +} + +.subMenu .subMenuItemselected { + display: block; + padding: 5px; + border-right: 1px solid #FFF; + font-size: 14px; + color: #FFF; + font-weight: bold; + text-decoration: none; +} + +.subMenu ul ul a.subMenudrop, +.menu ul ul a.subMenudrop:visited { + font-weight: bold; + text-decoration: underline; +} + +.subMenu ul ul ul a, +.subMenu ul ul ul a:visited { + background: #A3514F; +} + +.subMenu ul ul ul a:hover { + text-decoration: underline; +} + +.subMenu ul ul { + visibility: hidden; + position: absolute; + height: 0; + left: 0; +} + +.subMenu ul ul ul { + left: 141px; + top: 0; + width: 149px; +} + +.subMenu ul ul ul.left { + left: -149px; +} + +.subMenu ul ul a, +.subMenu ul ul a:visited { + background: #A3514F; + color: #FFF; + height: auto; + padding: 4px 6px; + line-height: 1em; + width: 148px; + margin-left: -1px; + border-left: 1px solid #FFF; + border-right: none; +} + +.subMenu a:hover, +.subMenu ul ul a:hover { + text-decoration: underline; + background: #573333; +} + +.subMenu :hover>a, +.subMenu ul ul :hover>a { + text-decoration: underline; +} + +.subMenu ul li:hover ul, +.subMenu ul a:hover ul { + visibility: visible; +} + +.subMenu ul :hover ul ul { + visibility: hidden; +} + +.subMenu ul :hover ul :hover ul { + visibility: visible; +} + +.subMenu table { + position: absolute; + top: 0; + margin-top: 15px; + left: 0; + border-collapse: collapse; + background: #A3514F; + display: none; +} + +.subMenu table a, +.subMenu table a:visited { + border: none; + width: 148px; + padding-top: 8px; +} + +#LeftGutterAdContainer { + position: fixed; + top: 0; + left: 50%; + margin-left: -850px; +} + +#RightGutterAdContainer { + position: fixed; + top: 0; + left: 50%; + margin-left: 450px; +} + +.partnerLogo { + margin-right: 30px; + vertical-align: middle; +} + +.errorMsg { + font-weight: bold; + text-align: center; + display: block; + font-size: 1.5em; + margin: .83em 0; + letter-spacing: 1px; +} + +.facepile { + min-height: 0; +} + +body { + margin: 0; + padding: 0; + background: url(/images/css/bkg.jpg) top center repeat-x #000444; + font-family: Arial, Helvetica, sans-serif; + color: black; + font-size: 12px; +} + +a { + text-decoration: none; + color: #00f; +} + +a:hover, +a:active { + text-decoration: underline; +} + +a.green { + color: #080; +} + +a.green:hover { + color: #0c0; +} + +a img { + border: none; +} + +#Header a:hover { + text-decoration: none; +} + +#MasterContainer { + background-image: none; +} + +#Container { + background: Transparent; + border: none; +} + +#HeaderContainer { + position: relative; + margin: 0; + padding: 0; + width: 900px; + height: 225px; + background: url(/images/css/head_03.png) repeat scroll 0 0 transparent; + background-position: 0 0; + background-repeat: no-repeat; + z-index: 6; +} + +#Banner { + height: 100px; + background: none; + position: relative; + bottom: 0; +} + +#Banner #Logo { + height: 70px; + left: 275px; + position: absolute; + top: 10px; + width: 350px; + margin: 0; + float: none; +} + +#Header .headLink { + position: absolute; + top: 4px; + left: 278px; + width: 348px; + height: 88px; +} + +#Banner #Authentication { + position: relative; + top: 0; + margin: 0; + height: 28px; + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + font-weight: normal; + color: Black; + float: left; + background: url(/images/css/head_bkg_t1.png) no-repeat left top; + padding: 0 0 0 2px; +} + +#Banner #Authentication #AuthenticationBannerSpan { + background: url(/images/css/head_bkg_t2.png) no-repeat scroll right top transparent; + display: block; + height: 28px; + padding: 6px 10px 0; +} + +#Banner #Authentication a { + height: 18px; + background: url(/images/css/btn_blue18h.png) repeat-x; + background-position: 0 0; + margin: 0 5px; + font-weight: bold; + font-size: 10px; + padding: 2px 5px; +} + +#Banner #Authentication a:hover { + background-position: 0 -18px; +} + +#Banner #Alerts { + background: Transparent; + border: none; + position: absolute; + width: 147px; + height: 81px; + bottom: 0; + right: 3px; + float: none; +} + +#Body { + margin: 0; + padding: 5px; + width: 890px; + background: url(/images/css/containerBkg_01.png); + _overflow: hidden; +} + +.favorited, +.notFavorited { + background: url(/images/css/favoriteStar_20h.png) no-repeat 0 -20px; + width: 21px; + height: 20px; + margin: 0; + display: inline-block; + position: relative; + top: 3px; + *display: inline; + *zoom: 1; +} + +.notFavorited { + background-position: 0 0; +} + +#Footer { + background: #e6e6e6; + text-align: center; + font-size: 13px; + color: #aaa; + margin: 0; + padding: 3em 20px; + width: 860px; +} + +#Footer .FooterNav { + color: #bbb; +} + +#Footer .SEOGenreLinks { + padding: 1em 0 2em 0; + font-size: 11px; +} + +#Footer .Legalese { + font-size: 10px; + margin-bottom: 1em; +} + +#Footer .Legalese p { + margin: 0; + padding: 0; +} + +.blueAndWhite { + border: 2px solid #6e99c9; + background-color: #fff; + color: #000; +} + +.blueAndWhite .titleBar { + background-color: #000; + color: #FFF; + font-weight: bold; + padding: 2px 2px 2px 2px; + margin-bottom: 5px; + font-size: 13px; +} + +#ResetPassword, +#ResetPassword input { + font-size: 16px; +} + +#ResetPassword #ResetPasswordTable td { + padding: 5px; +} + +.ParentsLearningContent { + font-size: 14px; +} + +.ParentsLearningContent .ParentsLearningHeader { + text-decoration: none; +} + +.StandardBoxLight { + float: inherit; + border: 1px solid #3B526B; + padding: 10px 10px 10px 10px; + margin-bottom: 10px; + display: block; +} + +.StandardBoxLightHeader { + float: inherit; + background-color: #3B526B; + text-align: center; + color: #FFF; + text-align: left; + font-size: 16px; + font-weight: bold; + padding: 5px 10px 5px 20px; + display: block; +} + +.ParentsLearningContent .StandardBoxLightHeader { + margin: 10px 0; +} + +.LoginParentAccount { + text-align: left; +} + +.ParentsControlPanel, +.ParentsControlPanel input { + font-size: 14px; +} + +.ParentsControlPanelTable table { + border-collapse: collapse; + border-spacing: 0; +} + +.ParentsControlPanelTable table td, +.ParentsControlPanelTable table th { + border: 1px solid #EEE; + padding: 5px; +} + +.ParentsControlPanelTable table tr:first-child td, +.ParentsControlPanelTable table tr:first-child th { + border-top: 0; +} + +.ParentsControlPanelTable table tr:last-child td { + border-bottom: 0; +} + +.ParentsControlPanelTable table tr td:first-child, +.ParentsControlPanelTable table tr th:first-child { + border-left: 0; +} + +.ParentsControlPanelTable table tr td:last-child, +.ParentsControlPanelTable table tr th:last-child { + border-right: 0; +} + +.ContinueButtonFix { + text-align: center; +} + +.ParentCenterAlignedTable table { + margin: 0 auto; +} + +.JustWhiteBox { + float: inherit; + background-color: White; + margin-bottom: 10px; + display: block; +} + +.MediumButton { + background-color: #F5CD2F; + color: #000; + font-family: Verdana, Helvetica, Sans-Serif; + font-size: 15px; + font-weight: bold; + padding: 5px; + display: inline-block; + border: 1px solid #6E99C9; + text-align: center; + cursor: pointer; +} + +.MediumButton:hover { + background-color: #FF9D2F; +} + +.MediumButtonSignup { + background-color: #8CE16F; + color: #000; + height: 2.5em; + font-family: Verdana, Helvetica, Sans-Serif; + font-size: 15px; + font-weight: bold; +} + +.catalog_nav { + color: White; + font-family: Arial, Helvetica, Sans-Serif; + font-size: 14px; + position: relative; + z-index: 5; + float: right; +} + +.catalog_nav ul { + padding: 0; + margin: 0; + list-style-type: none; +} + +.catalog_nav li { + float: left; + position: relative; + text-align: center; +} + +.catalog_nav a, +.catalog_nav a:visited { + background: #b9cee5 url(/images/tabmiddle.png) repeat-x; + display: block; + padding: 5px; + margin-right: 4px; + font-size: 14px; + color: #FFF; + height: 18px; + cursor: pointer; +} + +.catalog_nav .catalog_navselected { + display: block; + background: #6E99C9 url(/images/tabmiddleselected.png) repeat-x; + padding: 5px 10px; + margin-right: 4px; + font-size: 14px; + color: #FFF; + font-weight: bold; + text-decoration: none; + height: 18px; +} + +.catalog_nav ul ul a.catalog_navdrop, +t.menu ul ul a.catalog_navdrop:visited { + font-weight: bold; + text-decoration: none; +} + +.catalog_nav ul ul ul a:hover { + text-decoration: underline; +} + +.catalog_nav ul ul { + visibility: hidden; + position: absolute; + height: 0; + left: 0; + z-index: 20; +} + +.catalog_nav ul ul ul { + left: 141px; + top: 0; + width: 89px; +} + +.catalog_nav ul ul ul.left { + left: -149px; +} + +.catalog_nav ul ul a, +.catalog_nav ul ul a:visited { + color: #FFF; + background: #6E99C9; + height: auto; + padding: 4px 6px; + line-height: 1em; + width: 78px; + margin-right: 4px; + z-index: 20; + height: 18px; +} + +.catalog_nav img { + border: 0; + margin-right: 3px; + vertical-align: middle; +} + +.catalog_nav a:hover { + text-decoration: none; + background: #6E99C9 url(/images/tabmiddleselected.png) repeat-x; +} + +.catalog_nav ul ul a:hover { + text-decoration: none; + background: #517194; +} + +.catalog_nav :hover>a, +.catalog_nav ul ul :hover>a { + text-decoration: none; +} + +.catalog_nav ul li:hover ul, +.catalog_nav ul a:hover ul { + visibility: visible; +} + +.catalog_nav ul :hover ul ul { + visibility: hidden; +} + +.catalog_nav ul :hover ul :hover ul { + visibility: visible; +} + +.catalog_nav table { + position: absolute; + top: 0; + margin-top: 15px; + left: 0; + border-collapse: collapse; + background: #6E99C9; + display: none; +} + +.catalog_nav table a, +.catalog_nav table a:visited { + border: none; + width: 78px; + padding-top: 8px; +} + +.Step1 { + float: left; + font-size: 16px; + font-weight: bold; + background: url(/images/step1.png) no-repeat 0; + line-height: 32px; + padding-left: 32px; +} + +.Step2 { + float: left; + font-size: 16px; + font-weight: bold; + background: url(/images/step2.png) no-repeat 0; + line-height: 32px; + padding-left: 32px; +} + +.Step3 { + float: left; + font-size: 16px; + font-weight: bold; + background: url(/images/step3.png) no-repeat 0; + line-height: 32px; + padding-left: 32px; +} + +.CatalogOptions { + float: left; + padding: 20px; + background: #8bc2ff url(/images/catalog_options_back.png) repeat-x; + border: 0; + margin-bottom: 0; + display: none; + width: 176px; + overflow: hidden; +} + +#ApplyFilters input { + font-size: 17px; + cursor: pointer; +} + +.CatalogOptionsSections { + float: left; + margin: 5px 20px 0 5px; +} + +.CatalogOptionsHelp { + margin-top: -5px; + float: left; +} + +.CatalogOptionsHelp ul { + list-style: none; +} + +.CatalogOptionsHelp ul li { + margin-top: 3px; +} + +.CatalogOptionsHelp ul li a { + background: url(/images/smallmetallicbutton.png) repeat-x; + border: 2px solid transparent; + padding: 3px; + font-size: 12px; + cursor: pointer; + text-decoration: none; + display: block; + width: 120px; + text-align: center; +} + +.CatalogOptionsHelp ul li a:hover { + border-color: #333; +} + +.bc_iconset, +#BuildersClubContainer div.icons { + background-image: url(/images/bc_page_icon_sprites.png); + background-repeat: no-repeat; + width: 32px; + display: inline-block; + text-align: center; +} + +#BuildersClubContainer div.maps_icon { + background-position: 0 1px; + height: 30px; +} + +#BuildersClubContainer div.money_icon { + background-position: 0 -28px; + height: 28px; +} + +#BuildersClubContainer div.shirt_icon { + background-position: 0 -55px; + height: 30px; +} + +#BuildersClubContainer div.ads_icon { + background-position: 0 -85px; + height: 30px; +} + +.bc_icon, +#BuildersClubContainer div.bc_icon { + background-position: 0 -115px; + height: 31px; +} + +#BuildersClubContainer div.gear_icon { + background-position: 0 -146px; + height: 30px; +} + +#BuildersClubContainer div.groups_icon { + background-position: 0 -173px; + height: 23px; +} + +#BuildersClubContainer div.badges_icon { + background-position: 0 -196px; + height: 30px; +} + +#BuildersClubContainer div.beta_icon { + background-position: 0 -228px; + height: 31px; +} + +#BuildersClubContainer div.tbc_icon { + background-position: 0 -263px; + height: 31px; +} + +#BuildersClubContainer div.obc_icon { + background-position: 0 -297px; + height: 31px; +} + +#BuildersClubContainer div.upgrades_enabled { + background-image: url(/images/buybc/bc_sprites_math_enabled.png); + background-repeat: no-repeat; + display: inline-block; + height: 95px; + width: 128px; +} + +#BuildersClubContainer div.upgrades_disabled { + background-image: url(/images/buybc/bc_sprites_math_disabled.png); + background-repeat: no-repeat; + display: inline-block; + height: 95px; + width: 128px; +} + +#BuildersClubContainer div.bcmonthly { + background-position: 0 0; +} + +#BuildersClubContainer div.bc6 { + background-position: -128px 0; +} + +#BuildersClubContainer div.bc12 { + background-position: -256px 0; +} + +#BuildersClubContainer div.bclife { + background-position: -384px 0; +} + +#BuildersClubContainer div.tbcmonthly { + background-position: 0 -95px; +} + +#BuildersClubContainer div.tbc6 { + background-position: -128px -95px; +} + +#BuildersClubContainer div.tbc12 { + background-position: -256px -95px; +} + +#BuildersClubContainer div.tbclife { + background-position: -384px -95px; +} + +#BuildersClubContainer div.obcmonthly { + background-position: 0 -191px; +} + +#BuildersClubContainer div.obc6 { + background-position: -128px -191px; +} + +#BuildersClubContainer div.obc12 { + background-position: -256px -191px; +} + +#BuildersClubContainer div.obclife { + background-position: -384px -191px; +} + +#BuildersClubContainer .bctotbcconversion { + background-image: url(/images/BuyBC/bc_lifetime_tbc_lifetime_discount.png); + background-repeat: no-repeat; + height: 95px; + width: 128px; +} + +#BuildersClubContainer .bctoobcconversion { + background-image: url(/images/BuyBC/bc_lifetime_obc_lifetime_discount.png); + background-repeat: no-repeat; + height: 95px; + width: 128px; +} + +#BuildersClubContainer .tbctoobcconversion { + background-image: url(/images/BuyBC/tbc_lifetime_obc_lifetime_discount.png); + background-repeat: no-repeat; + height: 95px; + width: 128px; +} + +#BuildersClubContainer upgrade_button { + cursor: pointer; +} + +.OBCSellSheet ul { + list-style: armenian; + width: 500px; +} + +.OBCSellSheet ul li { + padding: 10px; + border-bottom: 1px solid #abc; + position: relative; +} + +.OBCSellSheet ul li em { + -moz-background-clip: border; + -moz-background-inline-policy: continuous; + -moz-background-origin: padding; + background: transparent url(/images/obctip.png) no-repeat scroll 0 0; + display: none; + font-style: normal; + height: 45px; + left: -10px; + padding: 15px 0; + position: absolute; + text-align: center; + top: -40px; + width: 300px; + z-index: 2; + color: #FFF; +} + +.hoverover { + cursor: pointer; +} + +.AlertSpace { + color: #6e99c9; + margin: 0 auto; +} + +div.icons, +a.icons { + background-image: url(/images/master_page_image_sprites.png?v=1202010); + background-repeat: no-repeat; + display: inline-block; + vertical-align: middle; +} + +div.message_icon { + background-position: -65px 0; + height: 11px; + width: 13px; + margin: 3px; + float: left; +} + +div.robux_icon { + background-position: -33px 0; + height: 12px; + width: 16px; + margin: 3px; + float: left; +} + +div.tickets_icon { + background-position: -49px 0; + height: 16px; + width: 16px; + margin: 3px; + float: left; +} + +div.friends_icon { + background-position: -78px 0; + height: 14px; + width: 12px; + margin: 3px; + float: left; +} + +a.rss_icon { + background-position: 0 0; + height: 14px; + width: 14px; +} + +a.twitter_icon { + background-position: -14px 0; + height: 16px; + width: 19px; +} + +div.MessageAlert { + height: 17px; + vertical-align: middle; + width: 49%; + float: left; + height: 32px; + overflow: hidden; + background: #FFF; +} + +div.MessageAlert a:hover { + color: #1874CD; +} + +div.RobuxAlert { + padding-top: 2px; + vertical-align: middle; + width: 49%; + float: left; + overflow: hidden; + border-top: 1px solid #6E99C9; + background: #FFF; + height: 29px; +} + +div.RobuxAlert a { + color: Green; + vertical-align: middle; +} + +div.RobuxAlert a:hover { + color: #49b745; +} + +div.TicketsAlert { + padding-top: 2px; + vertical-align: middle; + width: 49%; + float: left; + overflow: hidden; + border-left: 1px solid #6E99C9; + border-top: 1px solid #6E99C9; + background: #FFF; + height: 29px; +} + +div.TicketsAlert a:hover { + color: #FF3000; +} + +div.FriendsAlert { + color: #883000; + height: 20px; + vertical-align: middle; + width: 49%; + float: left; + height: 32px; + overflow: hidden; + border-left: 1px solid #6E99C9; + background: #FFF; +} + +div.FriendsAlert a { + color: #883000; + vertical-align: middle; +} + +div.FriendsAlert a:hover { + color: #00D; +} + +a.MessageAlertCaption { + color: #6e99c9; + vertical-align: middle; + font-weight: bold; +} + +a.RobuxAlertCaption { + color: Green; + vertical-align: middle; + font-weight: bold; +} + +a.TicketsAlertCaption { + color: #fbb117; + vertical-align: middle; + font-weight: bold; +} + +a.FriendsAlertCaption { + color: #883000; + vertical-align: middle; + font-weight: bold; +} + +#Authentication span a { + color: #FFF; +} + +.MySetsDisplayInfo { + padding: 10px 20px 10px 20px; + background: #8bc2ff url(/images/catalog_options_back.png) repeat-x; + border: 0; + margin-bottom: 0; + overflow: hidden; + height: 125px; +} + +.MySetsDisplayInfo h1 { + margin: 0; + padding: 0; + text-align: center; + color: White; + font-size: 16px; + font-weight: bold; +} + +.MySetsDisplayInfo h1>a { + cursor: pointer; + color: Blue; + font-size: 12px; + font-style: italic; + margin-left: 5px; +} + +.CreateSetButton { + cursor: pointer; + text-decoration: none; +} + +.SetAddButton { + margin-bottom: 3px; + cursor: pointer; + height: 16px; + display: block; + font-size: 12px; + overflow: hidden; + width: 100px; +} + +.CreateSetButton:hover, +.SetAddButton:hover { + background-color: Gray; +} + +.SetAddButtonAlreadyContainsItem { + margin-bottom: 3px; + height: 16px; + display: block; + width: 100%; + cursor: default; + color: #ddd; + font-style: italic; + font-size: 12px; + background: url(/images/accept.png) no-repeat center left; + background-position: 1px 0; + padding-left: 18px; + width: 92px; + overflow: hidden; +} + +.CantAddToSetLabel { + float: left; + width: 75px; +} + +.CantAddToSetHelpImg { + float: left; + vertical-align: text-top; + cursor: pointer; +} + +.SetDescription { + float: left; + overflow-y: auto scroll; + overflow-x: hidden; +} + +.SetList { + z-index: 10; + height: 0; + float: left; + width: 0; +} + +.friendBarDropDown { + position: absolute; + margin-top: 0; + margin-left: 28px; + z-index: 10; +} + +.SetList>img { + position: relative; + float: left; + z-index: 10; + width: 20px; + cursor: pointer; + top: 5px; + left: 5px; +} + +.CantAddToSetLabel, +.SetListDropDownList { + float: left; + position: relative; + top: -18px; + left: 20px; + z-index: 11; + display: block; +} + +.CantAddToSetLabel, +.SetListDropDownList { + background: #6e99c9; + width: 100px; + border: 3px solid #C6D9FD; + padding: 3px; +} + +.SetListDropDown, +.friendBarDropDownList { + display: none; + float: left; + z-index: 10; + height: 0; +} + +.friendBarDropDownList { + position: relative; + height: 100%; + width: 120px; + border: 1px solid black; +} + +.friendBarDropDownList>ul { + list-style: none outside none; + margin: 0; + padding-left: 0; +} + +.friendBarDropDownList li { + background-color: White; + color: Black; + cursor: default; + float: left; + position: relative; + list-style: none; + display: block; + z-index: 11; + height: 18px; +} + +.friendBarDropDownList li>div { + margin: 2px; + width: 116px; +} + +.friendBarDropDownList li:hover { + background-color: Black; + color: White; +} + +.friend_dropdownbutton20 { + background: url(/images/friendsbar/friend_dropdownBtn20h.jpg); + float: left; + cursor: pointer; + height: 20px; + width: 20px; + background-position: top left; +} + +.friend_dropdownbutton20:hover { + background-position: bottom left; +} + +.ContestButton { + float: left; + font-size: 20px; + padding: 4px 10px; + background: url(/images/Contests/contestbutton.png) repeat-x; + color: #FFF; + border: 2px solid #193441; + cursor: pointer; + text-align: center; +} + +.ContestButton:hover { + background: #5d90a6; +} + +.ContestButtonSkip { + font-size: 20px; + padding: 4px 10px; + background-color: #283d47; + color: #FFF; + border: 2px solid #193441; + cursor: pointer; + text-align: center; +} + +.ContestButtonSkip:hover { + background: #5d90a6; +} + +ul.ContestPrizes { + list-style: none; + margin: 0; + padding: 0; +} + +a.slider_next { + color: #444; + font-size: 20px; + font-weight: bold; +} + +a.slider_prev { + color: #444; + font-size: 20px; + font-weight: bold; +} + +a.contesttab { + float: left; + background: #B2C1D2; + padding: 3px 5px; + color: #FFF; + margin-right: 4px; + text-decoration: none; + display: block; + font-size: 14px; + font-weight: bold; +} + +a.contesttab:hover { + background: #6E99C9; +} + +a.contesttabselected { + float: left; + background: #6E99C9; + padding: 3px 5px; + color: #FFF; + margin-right: 4px; + text-decoration: none; + display: block; + font-size: 14px; + font-weight: bold; +} + +div.ContestBox { + border: 2px solid #6E99C9; + background: url(/images/Contests/contestback.png?v=2) repeat-x; + background-color: #c5d3e3; + float: left; + margin-bottom: 10px; + padding: 10px; +} + +.Contests { + float: left; + width: 900px; + margin: 10px auto 0 auto; +} + +.Contests h1 { + margin: 0; + color: #6E99C9; + float: left; + width: 100%; +} + +.FullSubmissions { + width: 300px; + padding: 5px; + float: left; + margin-left: 3px; + margin-bottom: 1px; + border-bottom: 1px solid #FFF; + color: #000; +} + +.ContestShowcase { + width: 90%; + padding: 2px; + border: 2px solid transparent; + cursor: pointer; + margin: 2px auto; + background: #d5dec2; +} + +.ContestShowcase:hover { + border: 2px solid #AAA; +} + +.VibModalBack { + z-index: 665; + position: fixed; + width: 100%; + height: 100%; + background: gray; + opacity: .5; + filter: alpha(opacity=50); + background-repeat: repeat; + top: 0; + left: 0; +} + +.VibModal { + z-index: 666; + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; +} + +.VibModalBox { + z-index: 667; + width: 500px; + margin: 7% auto; + background: #FFF; + border: 5px solid #6E99C9; +} + +.VibModalContents { + padding: 10px; +} + +.VibModalHeader { + width: 96%; + padding: 1% 2%; + font-size: 20px; + font-weight: bold; + background: #6E99C9; + text-align: center; + color: #FFF; +} + +.VibModalClose { + font-size: 25px; + color: #F00; + font-weight: bold; + float: right; + line-height: 17px; + cursor: pointer; +} + +div.cannot_vote { + height: 30px; + width: 30px; + background: url(/images/Contests/not_checked_box.png); + vertical-align: text-top; + margin-right: 7px; + float: left; +} + +div.can_vote { + height: 30px; + width: 30px; + background: url(/images/Contests/checked_box.png); + vertical-align: text-top; + margin-right: 7px; + float: left; +} + +div.vote_text { + font-size: 18px; + float: left; + color: #0F0; +} + +div.no_vote_text { + font-size: 18px; + float: left; + color: #F00; +} + +.Contests .StatCounters { + position: absolute; + font-size: 30px; + font-weight: bold; + color: #444; + text-align: left; + margin-left: 10px; + z-index: 4000; +} + +.Contests .StatType { + font-size: 14px; + margin-left: 4px; + margin-top: -7px; + display: block; +} + +.Contests .PlaceOpaqueName { + width: 148px; + font-weight: bold; + text-align: center; + padding: 3px 6px; + font-size: 10px; + color: #444; + background: #FFF; + opacity: .6; + filter: alpha(opacity=60); + margin: 1px auto 7px auto; + height: 24px; + overflow: hidden; + word-wrap: none; +} + +.Contests .FifthPlaceHolder { + float: left; + width: 20%; + margin-top: 5px; + margin: 0 auto; + text-align: center; +} + +div.friend_dock_chatbox { + float: left; + background-color: #E5E3E4; + width: 200px; + margin-right: 10px; + border: solid 1px #7F7F7F; + padding-bottom: 10px; +} + +div.friend_dock_chatsettings { + color: Black; + background-color: #E5E5E5; + border: solid 1px black; + width: 150px; + margin-right: 10px; + position: fixed; + bottom: 105px; + font-size: 11px; + z-index: 1200; + right: 30px; +} + +div.chat_settings_group_header { + font-weight: bold; + margin-bottom: 5px; +} + +div#friend_dock_chatholder { + position: fixed; + bottom: 106px; + z-index: 1022; +} + +div#friend_dock_container { + position: fixed; + bottom: 0; + width: 100%; + font-size: 10px; + font-family: Verdana; + z-index: 1022; +} + +div#friend_dock_titlebar ul { + padding: 0; + margin: 0; + list-style-type: none; +} + +div#friend_dock_thumb_container { + border: solid 1px #7F7F7F; + background-color: White; + height: 74px; + padding: 5px; + width: 100%; + overflow: hidden; +} + +div#friend_dock_thumbnails { + float: left; +} + +div#friend_dock_titlebar { + height: 18px; + position: relative; +} + +div#friend_dock_titlebar a { + color: Black; +} + +div#friend_dock_minimized_container { + width: 100%; + position: fixed; + bottom: 0; + z-index: 1022; +} + +div#friend_dock_friendzone, +div#friend_dock_chatzone { + float: left; + height: 65px; + margin-top: 5px; + margin-right: 10px; + margin-left: 10px; +} + +div.friend_dock_chatbox_closebutton { + float: right; + padding-right: 5px; + font-weight: bold; + font-size: 14px; +} + +div.friend_dock_chatbox_closebutton a.hover { + color: #fff; + text-decoration: none; +} + +div.blinkoffheader, +div.blinkonheader { + background-repeat: repeat-x; + border: none; + height: 16px; + padding: 2px; +} + +div.blinkoffheader { + background-image: url('/images/chat/HeaderBarRepeat1x1.jpg'); +} + +div.blinkonheader { + background-image: url('/images/chat/HeaderBarRepeat1x1_orange.jpg'); +} + +div.friend_dock_chatbox_username { + width: 150px; + float: left; + font-size: 14px; + color: White; +} + +div.friend_dock_chatbox_chat { + background-color: White; + border: solid 1px black; + margin-left: 10px; + margin-top: 5px; + margin-bottom: 10px; + width: 176px; + padding: 2px; + height: 196px; + overflow: auto; +} + +textarea.friend_dock_chatbox_entry { + margin-left: 10px; + width: 176px; + padding: 2px; + overflow: auto; + overflow-x: hidden; +} + +span.friend_dock_onlinestatus { + position: absolute; + margin-left: 16px; + width: 16px; + height: 16px; + background-image: url(/images/online.png); + background-repeat: no-repeat; +} + +span.friend_dock_offlinestatus { + position: absolute; + margin-left: 16px; + width: 16px; + height: 16px; + background-image: url(/images/offline.png); + background-repeat: no-repeat; +} + +div.friend_dock_onlinestatus { + position: absolute; + margin-top: 5px; + margin-left: 5px; + width: 16px; + height: 16px; + background-image: url(/images/online.png); + background-repeat: no-repeat; +} + +div.friend_dock_offlinestatus { + position: absolute; + margin-top: 5px; + margin-left: 5px; + width: 16px; + height: 16px; + background-image: url(/images/offline.png); + background-repeat: no-repeat; +} + +div.friend_dock_newmessage { + position: absolute; + margin-top: -5px; + margin-left: 42px; + width: 16px; + height: 16px; + background-image: url(/images/newmessage.png); + background-repeat: no-repeat; +} + +div.friend_dock_friend { + width: 50px; + height: 70px; + overflow: hidden; + margin-right: 10px; + margin-bottom: 10px; + float: left; +} + +div.friend_dock_pager { + width: 16px; + height: 16px; + margin-left: 0; + margin-right: 10px; + margin-bottom: 10px; + margin-top: 25px; +} + +.Navigation { + height: 35px; + z-index: 1022; +} + +.Navigation ul { + list-style: none; + margin: 0; + padding: 0; + width: 890px; + margin: 0 auto; +} + +.Navigation ul li { + float: left; + position: relative; +} + +.Navigation ul li a, +.Navigation ul li a:visited { + display: inline-block; + color: #FFF; + padding: 0 9px; + border-left: 1px solid #FFF; + font-size: 18px; +} + +.Navigation ul li a h1, +.Navigation ul li a h2 { + cursor: pointer; +} + +.Navigation ul li:first-child a { + border-left: none; +} + +.Navigation .dropdownnavcontainer { + display: none; + position: absolute; + margin-left: 126px; + margin-top: 27px; + z-index: 1024; +} + +.Navigation .dropdownmainnav { + display: block; + background: #6E99C9; + border-left: 1px solid #FFF; + border-right: 1px solid #FFF; + border-bottom: 1px solid #FFF; + padding: 10px; + width: 250px; + float: left; + z-index: 1024; + height: 225px; +} + +.Navigation .dropdownmainnav a { + color: White; +} + +.Navigation .dropdownmainnav a:hover { + text-decoration: underline; +} + +.friend_dock_username { + height: 15px; + overflow: hidden; + float: left; + width: 55px; +} + +.friend_dock_username_href { + color: Black!important; + font-size: 10px; + font-family: Verdana; +} + +div#chatbar { + position: fixed; + bottom: 0; + left: 0; + height: 0; + font-size: 11px; + font-family: Verdana; + margin: 0 1%; + z-index: 1022; +} + +div#statusbar { + position: fixed; + bottom: 0; + left: 0; + height: 30px; + background: url(/CSS/Base/CSS/chatbarback.jpg); + border-left: 3px solid #E5E5E5; + border-right: 3px solid #E5E5E5; + font-size: 11px; + font-family: Verdana; + margin: 0 1%; + z-index: 1022; +} + +#chat { + float: left; +} + +.chat_box { + border-left: 2px solid #6E99C9; + border-right: 2px solid #6E99C9; + width: 217px; + float: left; + height: 280px; + overflow-y: scroll; + overflow-x: none; + background: #eee; + font-size: 11px; + font-family: Verdana; +} + +.chat_text { + width: 80%; + padding: 4px; + float: left; + font-size: 11px; + font-family: Verdana; +} + +.chat_name { + color: #88a9bf; + border-bottom: 1px solid #CCC; + font-weight: bold; + padding: 3px; + float: left; + font-size: 11px; + font-family: Verdana; + width: 75%; +} + +.chat_header { + width: 211px; + float: left; + color: #03C; + background: #6E99C9; + color: #000; + font-weight: bold; + font-size: 12px; + margin: 0; + padding: 5px; + font-family: Verdana; +} + +.chat_options { + width: 219px; + float: left; + color: #03C; + background: #6E99C9; + color: #000; + font-weight: bold; + font-size: 12px; + margin: 0; + padding: 1px; + font-family: Verdana; +} + +#chat_close { + background: url(/CSS/Base/CSS/close.png); + height: 10px; + width: 10px; + float: right; + cursor: pointer; + margin-right: 1px; +} + +#chat_mini { + background: url(/CSS/Base/CSS/mini.png); + height: 10px; + width: 10px; + float: right; + cursor: pointer; + margin-right: 5px; +} + +.chat_abuse { + color: #FFF; + background: yellow; + color: #000; + font-weight: bold; + padding: 1px; + cursor: pointer; + font-family: Verdana; + font-size: 7px; + float: left; +} + +.chat_abuse:hover { + color: #FFF; + background: red; + color: #000; + font-weight: bold; + padding: 1px; + cursor: pointer; + font-family: Verdana; + font-size: 7px; + float: left; +} + +.chat_wrapper { + width: 221px; + background: #eee; + position: absolute; + bottom: 0; + float: left; + z-index: 1022; + margin-left: 3px; +} + +#chatfix { + position: fixed; + bottom: 0; + left: 176px; + z-index: 1337; +} + +.chat_input { + float: left; + background: #eee; + border-right: 2px solid #6E99C9; + border-left: 2px solid #6E99C9; + border-bottom: 2px solid #6E99C9; + border-top: 1px solid #6E99C9; + width: 217px; +} + +.chat_contents { + bottom: 27px; + display: none; +} + +.roster_box { + border-bottom: 2px solid #bcbcbc; + float: left; + cursor: pointer; + padding: 4px; + width: 125px; +} + +.roster_box:hover { + border-bottom: 2px solid #bcbcbc; + float: left; + cursor: pointer; + background: #eee; + padding: 4px; + width: 125px; +} + +.roster_name { + margin-left: 5px; +} + +.roster_alert { + margin: 1px; + padding: 1px; + font-size: 11px; + font-family: Verdana; +} + +#roster { + float: left; + font-size: 11px; + font-family: Verdana; + display: none; + height: 331px; + overflow-y: scroll; + background: #d8e0e9; + margin: 5px; + width: 150px; + position: absolute; + left: 0; + bottom: 25px; + z-index: 1022; +} + +#roster-wrapper { + float: left; + height: 1px; + width: 170px; +} + +#chat_friends { + float: left; + height: 20px; + color: #000; + font-weight: bold; + padding-left: 33px; + padding-top: 7px; + width: 119px; + cursor: pointer; +} + +#chat_friends:hover { + float: left; + height: 20px; + background: #d8e0e9; + color: #000; + font-weight: bold; + padding-left: 33px; + padding-top: 7px; + width: 119px; + cursor: pointer; +} + +#statusbar_wrapper { + padding-top: 3px; + float: left; +} + +#long-wrapper { + float: left; +} + +#chatlog { + float: left; + padding: 3px; + color: Green; +} + +.chat-unavailable { + background: url(/CSS/Base/CSS/unavailable.png); + height: 15px; + width: 15px; + float: left; +} + +.chat-available { + background: url(/CSS/Base/CSS/available.png); + height: 15px; + width: 15px; + float: left; +} + +.chat-default { + height: 15px; + width: 15px; + float: left; +} + +.chat_send_button { + background: #eee; + border: 0 solid #FFF; + float: left; + line-height: 17px; + height: 18px; + border-left: 2px solid #CCC; + border-bottom: 0; + border-right: 0; + border-top: 0; + padding: 3px; + cursor: pointer; +} + +.chat_send_button:hover { + background: #D8E0E9; + border: 0 solid #FFF; + float: left; + line-height: 17px; + height: 18px; + border-left: 2px solid #CCC; + border-bottom: 0; + border-right: 0; + border-top: 0; + padding: 3px; + cursor: pointer; +} + +.chat_send_input { + border: 0 solid #FFF; + float: left; + height: 22px; + font-size: 12px; + padding: 2px; +} + +.chat_close { + cursor: pointer; + color: #FFF; + font-size: 16px; + line-height: 11px; + padding-right: 8px; + float: left; + padding-top: 6px; +} + +.chat_close:hover { + cursor: pointer; + color: #000; + font-size: 16px; + line-height: 11px; + padding-right: 8px; + float: left; + padding-top: 6px; +} + +.chat_entry_click { + cursor: pointer; + padding-right: 10px; + padding-top: 7px; + padding-left: 10px; + padding-bottom: 7px; + padding-top: 6px; +} + +.chat_entry { + float: left; + background: #d8e0e9; + height: 27px; + color: #000; + font-weight: bold; + cursor: pointer; + width: 221px; +} + +#chat_login { + margin-top: 1px; + margin-left: 2px; + float: left; +} + +#chat_logout { + margin-top: 1px; +} + +#chat-availability { + float: left; +} + +#partycontainer { + position: fixed; + bottom: 91px; + z-index: 1022; +} + +.ActiveChatThumb { + z-index: 10; + cursor: pointer; +} + +.RemoveActiveChat { + position: absolute; + z-index: 10; + cursor: pointer; + margin-left: 40px; +} + +.clear { + overflow: hidden; + width: 100%; +} + +.followme_green19h { + background-image: url('/images/Buttons/followme_19h.png'); + background-repeat: no-repeat; + background-position: left top; + height: 19px; + cursor: pointer; + width: 65px; + float: left; + text-align: center; +} + +.followme_green19h:hover { + background-position: left bottom; +} + +.followme_gray19h { + background-image: url('/images/Buttons/followme_19h-gray.png'); + background-repeat: no-repeat; + background-position: left top; + height: 19px; + cursor: pointer; + width: 65px; + float: left; + text-align: center; +} + +.followme_gray19h:hover { + background-position: left bottom; +} + +.tab_white19h, +.tab_white19hselected { + background: transparent url('/images/friendsbar/tab_white19h_l2.gif') no-repeat left top; + color: #444; + display: block; + float: left; + font: normal 12px verdana, sans-serif; + text-decoration: none; + padding-left: 2px; + height: 19px; + outline: none; + cursor: pointer; +} + +.tab_white19h span, +.tab_white19hselected span { + background: transparent url('/images/friendsbar/tab_white19h_r2.gif') no-repeat right top; + display: block; + height: 15px; + padding: 2px 15px 2px 7px; + text-decoration: none; +} + +.tab_white19h:hover, +.tab_white19hselected { + background-position: left bottom; + color: #000; + outline: none; + text-decoration: none; +} + +.tab_white19h a, +.tab_white19hselected a { + text-decoration: none; + outline: none; +} + +.tab_white19h:hover span, +.tab_white19hselected span { + background-position: right bottom; + padding: 3px 15px 1px 7px; + text-decoration: none; +} + +.tab_white19h_flash { + background: transparent url('/images/friendsbar/tab_blue19h_l.gif') no-repeat left top; +} + +.tab_white19h_flash span { + background: transparent url('/images/friendsbar/tab_blue19h_r.gif') no-repeat right top; + color: White; +} + +.bold { + font-weight: bold; +} + +.clear { + clear: both; +} + +.alignCenter { + text-align: center; +} + +.InGamePopup { + background: url(/images/css/containerBkg_01.png); + _overflow: hidden; +} + +.voteYes { + background: url(/images/css/button_vote.jpg); + width: 24px; + height: 23px; + background-position: top left; +} + +.voteYes:hover { + background-position: bottom left; +} + +.voteNo { + background: url(/images/css/button_vote.jpg); + width: 24px; + height: 23px; + background-position: top right; +} + +.voteNo:hover { + background-position: bottom right; +} + +#MyAccountBalanceContainer { + font-family: Verdana, Helvetica, Sans-Serif; +} + +#MyAccountBalanceContainer h2 { + font-family: Verdana, Helvetica, Sans-Serif; + font-size: 2.5em; + font-weight: normal; + letter-spacing: .4em; + line-height: 1em; + margin: 10px 0 0 -2px; + padding: 0; +} + +#MyAccountBalanceContainer h3 { + background-color: #ccc; + border-bottom: solid 1px #000; + font-family: Verdana, Helvetica, Sans-Serif; + font-size: 1.7em; + font-weight: normal; + letter-spacing: .1em; + line-height: 1em; + margin: 0; + padding: 5px; + text-align: center; +} + +#MyAccountBalanceContainer h4 { + font-family: Verdana, Sans-Serif; + font-size: 13px; + font-weight: bold; + margin: 5px 0; + padding: 5px 5px 5px 15px; + color: #900; +} + +#MyAccountBalanceContainer #AboutRobux { + border-bottom: solid 1px #000; + border-left: solid 1px #000; + border-right: solid 1px #000; + float: right; + margin-top: 20px; + width: 275px; +} + +#MyAccountBalanceContainer #AboutRobux h3 { + border-top: solid 1px #000; +} + +#MyAccountBalanceContainer #AboutRobux p { + margin: 0; + padding: 10px 15px; +} + +#MyAccountBalanceContainer #Earnings { + border: solid 1px #000; + margin-top: 20px; + padding-bottom: 10px; + width: 600px; +} + +#MyAccountBalanceContainer .Earnings_Period { + margin-bottom: 20px; +} + +#MyAccountBalanceContainer .Earnings_LoginAward, +#MyAccountBalanceContainer .Earnings_PlaceTrafficAward, +#MyAccountBalanceContainer .Earnings_Ambassador { + padding: 0 0 0 50px; + height: 16px; + background-color: #eee; +} + +#MyAccountBalanceContainer .Earnings_SaleOfGoods, +#MyAccountBalanceContainer .Earnings_PeriodTotal, +#MyAccountBalanceContainer .Earnings_LoginAwardBC, +#MyAccountBalanceContainer .Earnings_Currency { + padding: 0 0 0 50px; + height: 16px; +} + +#MyAccountBalanceContainer .Earnings_LoginAward .Label, +#MyAccountBalanceContainer .Earnings_LoginAwardBC .Label, +#MyAccountBalanceContainer .Earnings_PlaceTrafficAward .Label, +#MyAccountBalanceContainer .Earnings_SaleOfGoods .Label, +#MyAccountBalanceContainer .Earnings_Ambassador .Label, +#MyAccountBalanceContainer .Earnings_Currency .Label { + float: left; + width: 380px; +} + +#MyAccountBalanceContainer .Earnings_PeriodTotal .Label { + float: left; + padding-right: 10px; + text-align: right; + width: 370px; +} + +#MyAccountBalanceContainer .Earnings_PeriodTotal .Field { + color: Blue; + font-weight: bold; +} + +#MyAccountBalanceContainer .Field { + float: right; + width: 75px; +} + +#MyAccountBalanceContainer .Zebra { + background-color: #eee; +} + +table.stats { + text-align: center; + font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; + font-weight: normal; + font-size: 11px; + color: #fff; + width: 280px; + background-color: #666; + border: 0; + border-collapse: collapse; + border-spacing: 0; +} + +table.stats td { + background-color: #CCC; + color: #000; + padding: 4px; + text-align: left; + border: 1px #fff solid; +} + +table.stats td.hed { + background-color: #666; + color: #fff; + padding: 4px; + text-align: left; + border-bottom: 2px #fff solid; + font-size: 12px; + font-weight: bold; +} + +#AssetContainer { + margin: 0 auto; + width: 620px; +} + +#AssetContainer h2 { + color: #333; + font-size: x-large; + margin-bottom: 5px; +} + +#AssetContainer #Asset { + background-color: #eee; + border: solid 1px #000; + color: #555; +} + +#BadgesContainer { + border: solid 1px #000; +} + +#BadgesContainer .Legend .BadgesList { + color: #666; + float: left; + list-style: none; + margin: 0; + padding: 0; +} + +#BadgesContainer .Legend .BadgesList li { + background-color: #fff; + background-position: 0 5px; + background-repeat: no-repeat; + margin: 10px 0 20px 0; + padding: 0 0 7px 80px; + border: solid 1px #000; +} + +#CommunityBadges .Legend, +#FriendshipBadges .Legend, +#CombatBadges .Legend, +#VisitsBadges .Legend { + float: left; + padding: 5px 15px 5px 5px; + width: 500px; +} + +#StatisticsRankingsPane_Friendship, +#StatisticsRankingsPane_Combat, +#StatisticsRankingsPane_Visits, +#FeaturedBadge_Community { + float: right; + margin: 15px; + width: 300px; +} + +#FeaturedBadge_Community { + border: solid 1px #000; + margin-top: 20px; + width: 325px; + background-color: White; +} + +#TurboBuildersClubBadge_Community { + border: solid 1px #000; + margin: 15px 15px 15px 15px; + background-color: White; + float: left; +} + +#OutrageousBuildersClubBadge_Community { + border: solid 1px #000; + margin: 15px 15px 15px 15px; + background-color: White; + float: left; +} + +#FeaturedBadge_Community h4, +#OutrageousBuildersClubBadge_Community h4 { + background-color: #6e99c9; + border-bottom: solid 1px #000; + color: #fff; + font-size: 1.4em; + font-weight: bold; + letter-spacing: .2em; + margin: 0; + padding: 3px; + text-align: center; +} + +#OutrageousBuildersClubBadge_Community h4 { + background-color: #000; + color: #FFF; + border-bottom: solid 1px #000; +} + +#OutrageousBuildersClubBadge_Community h4 .OutrageousSpan { + color: White; +} + +.FeaturedOBCContent .FeaturedOBCDescription { + color: #222; + margin: 10px 10px 10px 10px; + font-size: 14px; +} + +.FeaturedOBCIcon { + margin: 10px 10px 10px 10px; + float: left; + vertical-align: text-top; + width: 150px; +} + +#OutrageousBuildersClubBadge_Community { + margin: 10px 10px 10px; +} + +#FeaturedBadge_Community h4, +#TurboBuildersClubBadge_Community h4 { + background-color: #6e99c9; + border-bottom: solid 1px #000; + color: #fff; + font-size: 1.4em; + font-weight: bold; + letter-spacing: .2em; + margin: 0; + padding: 3px; + text-align: center; +} + +#TurboBuildersClubBadge_Community h4 { + background-color: #B94542; + color: #6e99FF; + border-bottom: solid 1px #000; +} + +#TurboBuildersClubBadge_Community h4 .TurboSpan { + color: White; +} + +.BadgeHint { + border: dashed 1px #000; + padding: 5px 5px 5px 5px; + background-color: #E8EDFF; +} + +.FeaturedBadgeContent { + margin: 0; + padding: 0 15px 10px 15px; +} + +.FeaturedBadgeContent p { + color: #222; + font-family: Verdana, Sans-Serif; + margin-top: 10px; +} + +.FeaturedBadgeIcon { + float: left; + margin: auto 10px auto 10px; + vertical-align: text-top; + width: 125px; +} + +.FeaturedTBCContent .FeaturedTBCDescription { + color: #222; + font-size: 14px; + margin: 10px 10px 10px 10px; +} + +.FeaturedTBCIcon { + margin: 10px 10px 10px 10px; + float: left; + vertical-align: text-top; + width: 150px; +} + +#TurboBuildersClubBadge_Community { + margin: 10px 10px 10px; +} + +#StatisticsRankingsPane_Community { + border: none; +} + +#BadgesContainer .Legend h4 { + background-color: #fff; + font-size: 1.4em; + font-weight: bold; + margin: 5px 0 5px 0; +} + +#BadgesContainer #CommunityBadges .Legend #Administrator { + background-image: url(/images/Badges/Administrator-75x75.png?v=2); +} + +#BadgesContainer #CommunityBadges .Legend #ForumModerator { + background-image: url(/images/Badges/ForumModerator-75x75.png?v=2); +} + +#BadgesContainer #CommunityBadges .Legend #ImageModerator { + background-image: url(/images/Badges/ImageModerator-75x75.png?v=2); +} + +#BadgesContainer #FriendshipBadges .Legend #Friendship { + background-image: url(/images/Badges/Friendship-75x75.png?v=2); +} + +#BadgesContainer #FriendshipBadges .Legend #Inviter { + background-image: url(/images/Badges/Inviter-75x75.png?v=2); +} + +#BadgesContainer #CombatBadges .Legend #CombatInitiation { + background-image: url(/images/Badges/CombatInitiation-75x75.png?v=2); +} + +#BadgesContainer #CombatBadges .Legend #Warrior { + background-image: url(/images/Badges/Warrior-75x75.png?v=2); +} + +#BadgesContainer #CombatBadges .Legend #Bloxxer { + background-image: url(/images/Badges/Bloxxer-75x75.png?v=2); +} + +#BadgesContainer #VisitsBadges .Legend #Homestead { + background-image: url(/images/Badges/Homestead-70x75.png?v=2); +} + +#BadgesContainer #VisitsBadges .Legend #Bricksmith { + background-image: url(/images/Badges/Bricksmith-54x75.png?v=2); +} + +#BadgesContainer .AccordionHeader, +#BadgesContainer .TopAccordionHeader, +#BadgesContainer .BottomAccordionHeader { + background-color: #ccc; + cursor: pointer; + font-size: 1.4em; + margin: 0 0 1px 0; + padding: 5px; + text-align: center; +} + +#BadgesContainer .AccordionHeader, +#BadgesContainer .BottomAccordionHeader { + border-bottom: solid 1px #000; + border-top: solid 1px #000; +} + +#BadgesContainer .TopAccordionHeader { + border-bottom: solid 1px #000; + border-top: none; +} + +#BadgesContainer .AccordionHeader:hover, +#BadgesContainer .TopAccordionHeader:hover, +#BadgesContainer .BottomAccordionHeader:hover { + background-color: #6e99c9; + color: #fff; +} + +.StatisticsRankings { + background-color: #eee; +} + +.StatisticsRankings h4 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-size: 1.2em; + margin: 0; + text-align: center; +} + +.StatisticsRankingsHeader_Rank, +.StatisticsRankingsHeader_Item, +.StatisticsRankingsHeader_Score { + border: solid 1px #000; + float: left; + font-weight: bold; + padding: 2px 0 2px 0; + text-align: center; +} + +.StatisticsRankingsHeader_Rank { + margin-right: 1px; + width: 45px; +} + +.StatisticsRankingsHeader_Item { + margin-right: 1px; + width: 150px; +} + +.StatisticsRankingsHeader_Score { + width: 95px; +} + +.StatisticsRanking, +.StatisticsRanking_AlternatingRow, +.StatisticsRanking_UserCentric, +.StatisticsRanking_UserCentric_AlternatingRow { + font: normal .9em/normal Verdana, sans-serif; +} + +.StatisticsRanking_UserCentric a, +.StatisticsRanking_UserCentric a:link, +.StatisticsRanking_UserCentric a:visited, +.StatisticsRanking_UserCentric a:active, +.StatisticsRanking_UserCentric_AlternatingRow a, +.StatisticsRanking_UserCentric_AlternatingRow a:link, +.StatisticsRanking_UserCentric_AlternatingRow a:visited, +.StatisticsRanking_UserCentric_AlternatingRow a:active { + color: #fff; +} + +.StatisticsRanking .StatisticsRanking_Rank, +.StatisticsRanking .StatisticsRanking_Item, +.StatisticsRanking .StatisticsRanking_Score, +.StatisticsRanking_AlternatingRow .StatisticsRanking_Rank, +.StatisticsRanking_AlternatingRow .StatisticsRanking_Item, +.StatisticsRanking_AlternatingRow .StatisticsRanking_Score { + border: solid 1px #000; + float: left; + padding: 2px 0 2px 0; + text-align: center; +} + +.StatisticsRanking .StatisticsRanking_Rank, +.StatisticsRanking_AlternatingRow .StatisticsRanking_Rank { + margin-right: 1px; + width: 45px; +} + +.StatisticsRanking .StatisticsRanking_Item, +.StatisticsRanking_AlternatingRow .StatisticsRanking_Item { + margin-right: 1px; + width: 150px; +} + +.StatisticsRanking .StatisticsRanking_Score, +.StatisticsRanking_AlternatingRow .StatisticsRanking_Score { + width: 95px; +} + +.StatisticsRanking_UserCentric .StatisticsRanking_Rank, +.StatisticsRanking_UserCentric .StatisticsRanking_Item, +.StatisticsRanking_UserCentric .StatisticsRanking_Score, +.StatisticsRanking_UserCentric_AlternatingRow .StatisticsRanking_Rank, +.StatisticsRanking_UserCentric_AlternatingRow .StatisticsRanking_Item, +.StatisticsRanking_UserCentric_AlternatingRow .StatisticsRanking_Score { + background-color: #6e99c9; + border: solid 1px #000; + color: #fff; + float: left; + font-weight: bold; + padding: 2px 0 2px 0; + text-align: center; +} + +.StatisticsRanking_UserCentric .StatisticsRanking_Rank, +.StatisticsRanking_UserCentric_AlternatingRow .StatisticsRanking_Rank { + margin-right: 1px; + width: 45px; +} + +.StatisticsRanking_UserCentric .StatisticsRanking_Item, +.StatisticsRanking_UserCentric_AlternatingRow .StatisticsRanking_Item { + margin-right: 1px; + width: 150px; +} + +.StatisticsRanking_UserCentric .StatisticsRanking_Score, +.StatisticsRanking_UserCentric_AlternatingRow .StatisticsRanking_Score { + width: 95px; +} + +.StatisticsRankingsFooter { + border-top: solid 1px #000; + padding: 2px 1px 2px 1px; +} + +.RankingsPeriodSelector { + font-family: Verdana, Sans-Serif; + font-size: xx-small; + width: 100%; +} + +.TileBadges { + float: left; + margin: 10px 10px; + text-align: center; +} + +#CatalogContainer { + font-family: Verdana, Sans-Serif; + min-width: 0; + position: relative; +} + +#CatalogContainer h2 { + font-family: Verdana, Sans-Serif; + font-weight: normal; + letter-spacing: .1em; + line-height: 24px; + padding: 0; + color: #555; + font-size: 14px; + margin-left: 10px; +} + +#BrowseMode ul li h3 a { + font-weight: normal; + font-size: 14px; +} + +#CatalogContainer ul { + font-family: Verdana, Sans-Serif; + list-style: none; + margin: 0 0 20px 0; + padding-left: 0; +} + +#CatalogContainer ul li { + margin: 5px 0 5px 10px; + font-family: Arial, Helvetica, sans-serif; + padding-left: 20px; + font-size: 14px; +} + +#CatalogContainer .Selected { + background: url('/images/gamesPage_filterArrow.png') no-repeat scroll 0 1px transparent; +} + +#CatalogContainer .DisplayFilters { + width: 185px; + background-color: White; + border: solid 2px #6e99c9; +} + +#CatalogContainer .Assets { + float: left; + min-width: 0; + overflow: hidden; + padding-bottom: 10px; + padding-left: 0; + padding-right: 0; + position: relative; + width: 680px; +} + +#CatalogContainer .SearchBar { + background-color: #eee; + border: solid 1px #bbb; + height: 30px; + margin: -5px 0 5px 0; + padding: 0; + text-align: center; +} + +#CatalogContainer .SearchBar .SearchBox, +#CatalogContainer .SearchBar .SearchButton { + height: 30px; + margin: 0; + padding: 0; +} + +#CatalogContainer .SearchBar .TextBox { + border: solid 1px #000; + height: 19px; + margin: 2px 0 0 0; + padding: 2px 3px 0 3px; + width: 250px; +} + +#CatalogContainer .SearchLinks { + z-index: 9; + display: inline; +} + +#CatalogContainer .SearchLinks a span { + display: none; +} + +#CatalogContainer .SearchLinks a:hover { + text-decoration: none; + border: none; +} + +#CatalogContainer .SearchLinks a:hover span { + display: block; + position: absolute; + top: 20px; + left: 15%; + width: 60%; + padding: 5px; + margin: 5px; + z-index: 10; + color: white; + background-color: #6e99c9; + border-width: 1px; + border-color: Gray; + border-style: ridge; + text-decoration: none; + line-height: 1.4em; + font: 11px Verdana, sans-serif; + text-align: center; +} + +#CatalogContainer .SearchError { + clear: both; + margin: 2px; + float: none; + padding: 2px; + text-align: center; + color: Red; +} + +#CatalogContainer .Assets .HeaderPager, +#CatalogContainer .Assets .FooterPager { + padding: 2px 0; + text-align: right; +} + +#CatalogContainer .Assets .HeaderPager { + margin-bottom: 10px; +} + +#CatalogContainer .Assets .HeaderPager .Label, +#CatalogContainer .Assets .FooterPager .Label { + font-size: 1em; + vertical-align: middle; +} + +#CatalogContainer .Asset { + margin: -1px 0 15px -1px; + vertical-align: top; + width: 122px; +} + +#CatalogContainer .Asset .AssetThumbnail { + border: solid 1px #EEE; + height: 110px; + text-align: center; + width: 110px; + background-color: #FFF; +} + +#CatalogContainer .Asset .AssetDetails { + font-family: Verdana, Sans-Serif; + overflow: hidden; + padding: 2px 0 6px 0; + width: 110px; +} + +#CatalogContainer .AssetName a { + font-size: .9em; + font-weight: bold; + line-height: 1.5em; + vertical-align: top; +} + +.AssetsBullet { + padding-right: 3px; +} + +#CatalogContainer .Label, +#CatalogContainer .Detail, +#CatalogContainer .DetailHighlighted, +#CatalogContainer .PriceInRobux, +#CatalogContainer .PriceInTickets { + font-size: .8em; +} + +#CatalogContainer .PriceInRobux { + color: Green; + font-weight: bold; +} + +#CatalogContainer .PriceInTickets { + color: #fbb117; + font-weight: bold; +} + +#CatalogContainer .AssetsDisplaySet { + float: left; + font-family: Comic Sans MS, Arial, Sans-Serif; + font-size: 1.5em; +} + +.Assets .StandardBoxHeader { + width: 660px; +} + +.Assets .StandardBox { + width: 660px; +} + +.CustomizeCharacterContainer { + font-family: Verdana, Sans-Serif; + margin: 0; +} + +.CustomizeCharacterContainer h4 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-family: Comic Sans MS, Verdana, Sans-Serif; + margin: 0; + text-align: center; +} + +.CustomizeCharacterContainer .NoResults { + padding: 15px; + text-align: center; +} + +.CustomizeCharacterContainer .TileGroup { + clear: left; + text-align: center; +} + +.CustomizeCharacterContainer .Asset { + float: left; + margin: 5px 7px 5px 0; + text-align: left; + vertical-align: top; + width: 112px; +} + +.CustomizeCharacterContainer .Asset .AssetThumbnail { + height: 110px; + position: relative; + text-align: center; + width: 110px; +} + +.CustomizeCharacterContainer .Asset .AssetDetails { + overflow: hidden; + padding: 2px 0 6px 0; + text-align: left; + width: 110px; +} + +.CustomizeCharacterContainer .AssetName a { + font-size: .9em; + font-weight: bold; + line-height: 1.5em; + vertical-align: top; +} + +.CustomizeCharacterContainer .Label, +.CustomizeCharacterContainer .Detail, +.CustomizeCharacterContainer .DetailHighlighted { + font-size: .8em; +} + +.CustomizeCharacterContainer .FooterPager { + border-top: solid 1px #000; + clear: left; + margin: 10px 0 0 0; + padding: 3px 0; + text-align: center; +} + +.AttireChooser { + border: solid 1px #000; + float: left; + margin: 0; + min-width: 0; + padding: 0; + position: relative; + text-align: left; + width: 530px; +} + +.Accoutrements { + border: solid 1px #000; + clear: left; + margin-top: 10px; + min-width: 0; + padding: 0; + position: relative; + text-align: left; + width: 530px; +} + +.AttireChooser .AttireCategory { + border-bottom: solid 1px #000; + margin: 0 0 10px 0; + padding: 3px 0; + text-align: center; +} + +.AttireChooser .AttireOptions { + margin: 5px; +} + +.AttireCategory .AttireCategorySelector_Selected { + font-weight: bold; +} + +.AttireChooser .HeaderPager, +.AttireChooser .HeaderPager { + margin-bottom: 10px; +} + +.AttireChooser .HeaderPager .Label, +.AttireChooser .FooterPager .Label { + font-size: 1em; + vertical-align: middle; +} + +.CharacterViewer { + border: solid 1px #000; + float: right; + width: 354px; +} + +.CharacterViewer .ReDrawAvatar { + font-size: 1em; + vertical-align: bottom; + text-align: center; +} + +.Mannequin { + clear: right; + margin-top: 10px; + text-align: center; + width: 354px; +} + +.Mannequin .ColorChooserFrame { + margin: 0 auto; +} + +.TeeShirtBuilder { + border: solid 1px #000; + clear: both; + margin-top: 10px; +} + +div.AspNet-DetailsView-Data ul { + margin: 0; + padding: 0; +} + +div.AspNet-DetailsView-Data li { + margin: 0; + padding: 0; + list-style-type: none; + position: relative; +} + +ul.AspNet-Menu { + position: relative; +} + +ul.AspNet-Menu, +ul.AspNet-Menu ul { + margin: 0; + padding: 0; + display: block; +} + +ul.AspNet-Menu li { + position: relative; + list-style: none; +} + +ul.AspNet-Menu li a, +ul.AspNet-Menu li span { + display: block; + text-decoration: none; +} + +ul.AspNet-Menu ul { + position: absolute; + display: none; +} + +ul.AspNet-Menu li:hover ul ul, +ul.AspNet-Menu li:hover ul ul ul, +ul.AspNet-Menu li.AspNet-Menu-Hover ul ul, +ul.AspNet-Menu li.AspNet-Menu-Hover ul ul ul { + display: none; +} + +ul.AspNet-Menu li:hover ul, +ul.AspNet-Menu li li:hover ul, +ul.AspNet-Menu li li li:hover ul, +ul.AspNet-Menu li.AspNet-Menu-Hover ul, +ul.AspNet-Menu li li.AspNet-Menu-Hover ul, +ul.AspNet-Menu li li li.AspNet-Menu-Hover ul { + display: block; +} + +.AspNet-Menu-Horizontal ul.AspNet-Menu li { + float: left; +} + +.AspNet-Menu-Horizontal ul.AspNet-Menu li li { + float: none; +} + +div.AspNet-TreeView { + margin: 0; + padding: 0; +} + +div.AspNet-TreeView ul { + list-style: none; + margin: 0; + padding: 0; +} + +.AspNet-TreeView-Hide { + display: none; +} + +#ContentBuilderContainer { + margin-top: 10px; +} + +#ContentBuilderContainer h2 { + font-family: Verdana, Sans-Serif; + font-size: 2.5em; + font-weight: normal; + line-height: 1em; + margin: 0; + padding: 0; +} + +#ContentBuilderContainer h3 { + background-color: #ccc; + font-size: 16px; + font-weight: bold; + padding: 5px; + text-align: center; +} + +#ContentBuilderContainer blockquote { + margin: 0 auto; +} + +#ContentBuilderContainer .UploaderPanel, +#ContentBuilderContainer .UpsellPanel { + text-align: center; +} + +#ContentBuilderContainer .SelectorArea { + margin: 0 auto; + margin-bottom: 20px; + margin-top: 20px; + text-align: center; +} + +#ContentBuilderContainer .DisclaimerLink { + z-index: 9; + display: inline; + font-size: 1.2em; +} + +#ContentBuilderContainer .DisclaimerLink a span { + display: none; +} + +#ContentBuilderContainer .DisclaimerLink a:hover { + text-decoration: none; + border: none; +} + +#ContentBuilderContainer .DisclaimerLink a:hover span { + display: block; + position: absolute; + top: 50%; + left: 12%; + width: 75%; + padding: 5px; + margin: 5px; + z-index: 10; + color: white; + background-color: #6e99c9; + border-width: 1px; + border-color: Gray; + border-style: ridge; + text-decoration: none; + line-height: 1.4em; + font: 12px Verdana, sans-serif; + text-align: left; +} + +#TradeCurrencyContainer { + margin-top: 10px; +} + +#TradeCurrencyContainer .TradeBox { + width: 100px; +} + +#TradeCurrencyContainer h2 { + font-size: 2.5em; + font-weight: normal; + line-height: 1em; + margin: 0 0 15px 0; + padding: 0; + text-align: center; +} + +#TradeCurrencyContainer .LeftColumn { + float: left; + width: 230px; +} + +#TradeCurrencyContainer .CenterColumn { + float: left; + width: 410px; +} + +#TradeCurrencyContainer .RightColumn { + float: left; + width: 230px; +} + +#TradeCurrencyContainer h4 { + border-bottom: solid 1px #000; + font-size: 1em; + font-weight: bold; + margin: 0; + padding: 5px; + text-align: center; + display: block; +} + +#TradeCurrencyContainer .AccordionHeader { + background-color: #ccc; + border: solid 1px #000; + cursor: pointer; + font-size: 1em; + font-weight: bold; + letter-spacing: .1em; + margin: 1px 0; + padding: 1px 1em; + text-align: center; +} + +#TradeCurrencyContainer .AccordionHeader:hover { + background-color: #6e99c9; + color: #fff; +} + +#CurrencyOffersPane { + float: right; +} + +.TradingDashboard { + margin-bottom: 10px; +} + +.CurrencyQuote, +.CurrencyTrade, +.CurrencyOffers, +.CurrencyBids, +.TradingDashboard { + width: 350px; +} + +.CurrencyQuote, +.CurrencyTrade, +.CurrencyOffers, +.CurrencyBids, +.OpenBids, +.OpenOffers, +.TradeHistory { + border: solid 1px #000; + padding: 0; +} + +.CurrencyQuote, +.CurrencyTrade, +.TradingDashboard, +.OpenBids, +.OpenOffers, +.TradeHistory, +.TradingDashboard .FooterPager { + margin: 0 auto; +} + +.CurrencyTrade, +.TradingDashboard { + margin-top: 20px; +} + +.CurrencyTradeDetails { + padding: 5px; +} + +.CurrencyTradeDetail, +.TradingDashboard .FooterPager { + padding-top: 5px; + text-align: center; +} + +.CurrencyOffers, +.CurrencyBids { + width: 200px; +} + +.CurrencyOffer, +.AlternatingCurrencyOffer, +.CurrencyBid, +.AlternatingCurrencyBid { + padding: 5px; + text-align: center; +} + +.CurrencyQuote .TableHeader, +.CurrencyOffers .TableHeader, +.CurrencyBids .TableHeader { + font-weight: bold; +} + +.CurrencyQuote .TableRow, +.CurrencyOffers .TableRow, +.CurrencyBids .TableRow { + border-top: solid 1px #000; +} + +.CurrencyQuote .Pair, +.CurrencyQuote .Rate, +.CurrencyQuote .Spread, +.CurrencyQuote .HighLow { + float: left; + padding: 5px; + text-align: center; + width: 77px; +} + +.DarkGradientBox { + background: url(/images/DarkGradientW150.png) repeat-y top left; + width: 150px; + color: White; + position: relative; + border: solid 2px #7DADE0; +} + +.DarkGradientBox .DGB_Header { + font-size: 14px; + font-weight: bold; + text-align: center; + padding-top: 5px; + padding-bottom: 0; + border-bottom: solid 2px #6e99c9; +} + +.DarkGradientBox .DGB_TextBox { + border: solid 2px #6e99c9; +} + +.DarkGradientBox .DGB_Label { + color: White; + font-size: 10px; + font-weight: bold; + text-align: left; +} + +.DarkGradientBox .DGB_Button { + cursor: pointer; + background-color: #435D77; + color: White; + text-decoration: none; + border: solid 1px #777; + padding: 6px 10px 6px 10px; + font-family: Verdana, Sans-Serif; + font-size: 12px; + font-weight: bold; + text-align: center; + white-space: nowrap; +} + +.DarkGradientBox .DGB_Button:link, +.DarkGradientBox .DGB_Button:visited { + background-color: #435D77; + color: White; + text-decoration: none; +} + +.DarkGradientBox .DGB_Button:hover, +.DarkGradientBox .DGB_Button:active { + background-color: #B6CCE4; + color: #435D77; + text-decoration: none; +} + +#FriendliestFolkPane { + border-color: #000; + border-style: solid; + border-width: 1px; + height: 184px; + margin-top: 10px; + overflow: auto; + width: 770px; +} + +#FriendliestFolk h4 { + font-size: 10pt; + font-weight: bold; + line-height: 1em; + margin-bottom: 5px; + margin-top: 5px; +} + +#GamesContainer { + font-family: Verdana, Sans-Serif; +} + +#GamesContainer h2 { + font-family: Verdana, Sans-Serif; + font-size: 2.5em; + font-weight: normal; + line-height: 1em; + margin: 0; + padding: 0; +} + +#GamesContainer h4 { + font-family: Verdana, Sans-Serif; + font-size: 1.3em; + font-weight: normal; + letter-spacing: .1em; + line-height: 1em; + margin: 15px 0; + padding: 0; +} + +#GamesContainer ul { + font-family: Verdana, Sans-Serif; + list-style: none; + margin: 10px 0 30px 0; + padding-left: 0; +} + +#GamesContainer ul li { + font-family: Verdana, Sans-Serif; + margin-bottom: .5em; +} + +#GamesContainer ul a { + font-size: 1.1em; +} + +#GamesContainer .DisplayFilters { + width: 170px; +} + +#GamesContainer #Games { + float: left; + padding-bottom: 10px; + padding-left: 0; + padding-right: 0; + width: 720px; + overflow: visible; +} + +.GameList { + overflow: visible; +} + +#GamesContainer .Ads_WideSkyscraper { + border: solid 1px #000; + float: right; + text-align: right; + width: 160px; +} + +#GamesContainer #Games .FooterPager { + margin: 20px 24px 0 0; + padding: 2px 0; + text-align: right; +} + +#GamesContainer #Games .HeaderPager { + margin: 0 24px 0 100px; + padding: 30px 0; + text-align: left; +} + +#GamesContainer #Games .HeaderPager .Label, +#GamesContainer #Games .FooterPager .Label { + font-size: 1em; + vertical-align: middle; +} + +#GamesContainer .Game { + margin: 0 10px 15px 10px; + vertical-align: top; + width: 162px; +} + +#GamesContainer .Game .GameThumbnail { + border: solid 1px #000; + width: 160px; + height: 100px; + text-align: center; +} + +#GamesContainer .Game .GameDetails { + font-family: Verdana, Sans-Serif; + overflow: hidden; + padding: 2px 0 6px 0; + width: 152px; +} + +.GameDetails12>GameName { + font-weight: bold; +} + +.GameName { + font-weight: bold; + font-size: 12px; +} + +#GamesContainer .GameName a { + font-size: .9em; + font-weight: bold; + line-height: 1.5em; + vertical-align: top; +} + +.GamesBullet { + padding-right: 3px; +} + +#GamesContainer .Label, +#GamesContainer .Detail, +#GamesContainer .DetailHighlighted { + font-size: .8em; +} + +#GamesContainer .DetailHighlighted { + color: Red; + font-weight: bold; +} + +#GamesContainer .GamesDisplaySet { + float: left; + font-family: Comic Sans MS, Arial, Sans-Serif; + font-size: 1.5em; +} + +.GamesInfoIcon, +.GenreIcon, +.GearIcon { + margin-top: 1px; + margin-right: 1px; + position: relative; + top: 3px; +} + +.SearchBoxBack .StandardBox { + background: #6e99c9; +} + +.GameFilter { + color: #555; + margin-left: 10px; + font-size: 14px; +} + +.GameFilter ul { + list-style-type: none; + padding-left: 0; + margin: 0; +} + +.GameFilter ul li { + margin: 5px 0; +} + +.GameFilter .SelectedFilter, +.GameFilter .SelectedGenre { + background: url(/images/gamesPage_filterArrow.png) no-repeat 0 1px; + cursor: pointer; + padding-left: 20px; + font-weight: normal; +} + +.GameFilter .GamesFilter, +.GameFilter .GamesGenre { + padding-left: 20px; + display: inline-block; +} + +.GamesGenre h3 { + display: inline-block; + cursor: pointer; + font-weight: normal; +} + +#PlayTabs a { + text-decoration: none; +} + +.SelectedFilter, +.SelectedGenre { + font-weight: normal; +} + +a.DisabledFilter, +a.DisabledFilter:hover { + color: gray; + text-decoration: none; + cursor: default; +} + +a.GamesGenre.DisabledFilter h3, +a.GamesGenre.DisabledFilter:hover h3 { + cursor: default; +} + +#BCOnlyPlaces { + position: relative; + width: 410px; + text-align: center; + float: left; + margin-top: 8px; + margin-bottom: 6px; +} + +#BCOnlyPlaces .StandardBoxHeaderGray { + width: 410px; + height: 27px; + padding: 9px 2px 0 2px; + *padding: 5px 2px 0 2px; +} + +#BCOnlyPlaces .StandardBox { + height: 188px; + padding: 2px 0; +} + +#BCOnlyPlacesTitle { + display: inline; + font-weight: bold; + font-size: 19px; + position: relative; + *margin-left: 5px; +} + +#BCOnlyGamesContent { + width: 370px; + margin: 0 auto; +} + +#BCOnlyGamesContentPrevNavButton { + position: absolute; + top: 105px; + left: 10px; + visibility: hidden; +} + +#BCOnlyGamesContentNextNavButton { + position: absolute; + top: 105px; + right: 10px; +} + +#GenreDescriptionPanel { + float: left; + width: 695px; + font-size: .9em; + padding: 10px; + border-top: 1px solid #AAA; +} + +.SearchIconButton { + background: url(/images/searchIcon.png) no-repeat; + cursor: pointer; + width: 16px; + height: 16px; + position: absolute; + top: 5px; + right: 4px; +} + +.GameItem { + padding: 6px; + margin-left: 8px; + margin-bottom: 8px; + position: relative; + text-align: left; +} + +.GameItem:hover { + display: block; + z-index: 99; +} + +.GameItem .AlwaysShown { + position: relative; + width: 160px; + height: 130px; +} + +.GameItem:hover .AlwaysShown { + z-index: 999; +} + +.GameItem .HoverShown { + display: none; + position: absolute; + width: 160px; + padding: 158px 15px 15px; + top: -10px; + left: -10px; + border: solid 1px #888; + background: #fff; + font-size: 11px; + text-align: left; + color: #888; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} + +.GameItem .CreatorName { + position: relative; + top: -5px; + font-size: 11px; + color: #888; +} + +.GameItem .BCOverlay { + position: absolute; + top: 81px; + left: 0; +} + +.GameItem .GenreIcon, +.GameItem .GearIcon { + position: static; + top: 0; + margin-top: 0; + margin-right: 0; +} + +#GamesLeftColumn { + width: 136px; +} + +.groupEmblemThumbnail { + margin-top: 10px; + margin-bottom: 10px; + margin-left: 8px; + margin-right: 8px; + text-align: center; + width: 105px; + overflow: hidden; +} + +#GroupThumbnails { + text-align: center; + margin-bottom: 10px; +} + +.GroupDescriptionThumbnail { + float: left; + clear: none; + margin: 0 10px 10px 0; +} + +.GroupMembers { + width: 100%; +} + +.GroupMembers tr { + padding-bottom: 10px; +} + +.GroupMembers td { + padding: 0 5px 10px 5px; + text-align: center; +} + +.IncompleteFormField { + color: red; +} + +.GroupWallPostButton { + width: 69px; + height: 53px; + margin: 3px 0 4px 0; + float: right; +} + +.GroupWallPostText { + width: 375px; + height: 53px; + float: left; +} + +.GroupDescriptionEdit { + border: none; + border-style: none; +} + +.EmblemAdminImage { + margin: 0x; +} + +.CreateNewGroup { + padding-bottom: 10px; + margin-bottom: 10px; + display: block; + text-align: center; + font-size: 12px; + cursor: pointer; +} + +.CreateNewGroupError { + color: Red; +} + +.GroupMembersAdminTable tr { + text-align: left; +} + +.GroupMembersAdminTable td { + width: 85px; + margin: 2px; +} + +#GroupSearchResults thead tr { + background-color: #B0C4DE; + color: Black; +} + +#GroupSearchResults .GroupEmblemImg { + border: solid 2px #B0C4DE; + padding: 2px; +} + +.selectedSmallThumb { + border: solid 2px #FFE390; +} + +.nonSelectedSmallThumb { + border: solid 2px transparent; +} + +#Help { + border-style: ridge; + border-color: #ddd; + border-width: 5px; + background-color: #eee; + height: 600px; + padding: 1px; +} + +#Help h1 { + text-indent: 10px; +} + +#Help .salesForce, +#Help .salesForce iframe { + margin-left: 5px; + margin-bottom: 10px; + float: left; + width: 625px; + height: 500px; +} + +#Help .avatar { + text-align: center; + display: block; + float: right; + clear: right; + margin-right: auto; + margin-left: auto; + padding-left: 0; + padding-right: 0; +} + +#Help .descriptionPanels { + background-color: Transparent; + background-image: url('/images/Speech Bubble 225.gif'); + width: 225px; + height: 235px; + background-repeat: no-repeat; + margin-top: 40px; +} + +#Help .descriptionPanels p { + font-family: Comic Sans MS; + padding-top: 20px; + padding-right: 40px; + padding-left: 25px; + text-align: left; + color: Navy; + font-size: 9pt; +} + +#Help .navigation { + clear: left; + color: #6e99c9; + border: none; + background-color: Transparent; + font-family: 'Comic Sans MS', Verdana, sans-serif; + font-size: 10pt; + font-weight: normal; + text-decoration: none; + text-align: center; +} + +#Help .navigation .MenuItem { + color: #6e99c9; + font-size: 16px; + line-height: 2em; +} + +#Help .navigation a.MenuItem:link, +#Help .navigation a.MenuItem:visited, +#Help .navigation a.MenuItem:active { + color: #6e99c9; + text-decoration: none; +} + +#Help .navigation a.MenuItem:hover { + text-decoration: underline; +} + +#Help .forumLinks { + font-family: Sans-Serif; + border-width: 3px; + border-color: #ddd; + border-style: groove; + visibility: hidden; + display: none; + filter: alpha(opacity=93); + opacity: .93; + background-color: #eee; + background-image: url('/images/help_gradient.png'); + background-repeat: repeat-y; + background-position: left top; + width: 150px; + font-size: 10pt; + text-align: center; + padding: 5px; + line-height: 2em; +} + +#InboxContainer { + margin-top: 10px; +} + +#InboxContainer #InboxPane { + float: left; + position: relative; + top: -2px; + width: 700px; +} + +.InboxDateField { + text-align: right; +} + +#InboxContainer h2 { + font-family: Verdana, Sans-Serif; + font-size: 2.5em; + font-weight: normal; + letter-spacing: .5em; + line-height: 1em; + margin: 0 0 10px 0; + padding: 0; +} + +#InboxContainer .Ads_WideSkyscraper { + border: solid 1px #000; + float: right; + text-align: right; + width: 160px; +} + +#InboxContainer #Inbox { + border: solid 1px #000; +} + +#InboxContainer .Buttons { + margin: 10px 0; + text-align: center; +} + +#InboxContainer .InboxHeader { + background: url(/images/topNav_black.png); + border: none; + color: #fff; + font: 1.2em/normal Verdana, sans-serif; + font-weight: lighter; + letter-spacing: .15em; + text-align: center; +} + +#InboxContainer .InboxRow { + cursor: pointer; + font: normal 1em/normal Verdana, sans-serif; +} + +#InboxContainer .InboxRow_Unread { + cursor: pointer; + font: bold 1em/normal Verdana, sans-serif; +} + +#InboxContainer .InboxRow:hover, +#InboxContainer .InboxRow_Unread:hover, +#InboxContainer .SystemAlertMessage:hover { + background-color: #6e99c9; + color: #fff; +} + +#InboxContainer .InboxHeader a, +#InboxContainer .InboxPager a, +#InboxContainer .InboxRow:hover a, +#InboxContainer .InboxRow_Unread:hover a, +#InboxContainer .SystemAlertMessage:hover a { + color: #fff; +} + +#InboxContainer .InboxPager { + background-color: #999; + font: bold 1.2em/normal Verdana, sans-serif; + letter-spacing: .15em; + text-align: center; +} + +#InboxContainer .SystemAlertMessage { + cursor: pointer; + font: normal 1em/normal Verdana, sans-serif; + color: #F00; +} + +#InboxContainer .SystemAlertMessage a { + color: #F00; +} + +#InfoContainer { + background-color: #eee; + border: solid 1px #000; + color: #555; + margin: 0 auto; + width: 620px; +} + +#InfoContainer h2 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-size: x-large; + margin: 0; + text-align: center; +} + +#InfoContainer #Content { + font: normal 1em/normal Verdana, sans-serif; + line-height: 1.5em; + padding: 10px 20px 10px 20px; +} + +#AlreadyInstalled { + font-size: large; + margin: 44px 44px 44px 44px; +} + +#AlreadyInstalled a { + text-decoration: underline; +} + +#ItemContainer { + margin-top: 10px; +} + +#ItemContainer h2 { + background-color: #036; + border-bottom: solid 1px #555; + color: #fff; + font-family: Verdana, Helvetica, Sans-Serif; + font-size: x-large; + margin: 0; + text-align: center; +} + +#ItemContainer h3 { + font-size: 1.5em; + font-weight: normal; + letter-spacing: .15em; + line-height: 1em; + margin: 0 0 .5em 0; + padding: 0; +} + +#ItemContainer #Item { + color: #555; + float: left; + font-family: Verdana, Sans-Serif; + width: 705px; +} + +#ItemContainer #Details { + margin: 10px; +} + +#ItemContainer #Thumbnail, +#ItemContainer #Thumbnail_Place { + border: solid 1px #eee; + padding: 0; + text-align: left; + min-width: 0; +} + +#ItemContainer #Thumbnail { + height: 420px; + width: 420px; +} + +#ItemContainer #Thumbnail_Place { + height: 230px; + width: 420px; +} + +#ItemContainer #Actions, +#ItemContainer #Actions_Place { + width: 408px; + background-color: #fff; + padding: 5px; + text-align: left; + min-width: 0; + overflow: hidden; + top: 420px; +} + +.AddRemoveFavorite { + background: url(/images/css/favoriteStar_20h.png) no-repeat 0 -20px; + margin: 0; + display: inline-block; + position: relative; + top: 3px; + *display: inline; + *zoom: 1; + padding-top: 4px; + padding-left: 25px; + width: 200px; + height: 18px; +} + +.AddRemoveFavorite:hover { + background-position: 0 0; +} + +#ItemContainer #Summary { + background-color: #fff; + border: dashed 1px #555; + display: inline; + float: right; + padding: 7px; + width: 235px; +} + +#ItemContainer #Summary #Creator { + clear: left; +} + +#ItemContainer #Summary #DescriptionLabel { + margin-bottom: .4em; + margin-top: .7em; +} + +.label { + margin-bottom: .5em; +} + +#ItemContainer #Summary .Description { + border: solid 1px #555; + font: normal 1em/normal Verdana, sans-serif; + max-height: 136px; + line-height: 1.5em; + padding: 4px; + overflow: auto; + text-align: left; +} + +#ItemContainer #Summary #ReportAbuse { + margin: 0 auto; + padding: 4px; + text-align: center; +} + +#ItemContainer #Summary #PublicDomainPurchase { + float: left; +} + +#ItemContainer #Summary #PublicDomainPurchase #PricePublicDomain { + color: Blue; + float: left; + font-weight: bold; + line-height: 2em; + width: 100px; +} + +#ItemContainer #Summary #PublicDomainPurchase #BuyForFree { + float: left; + line-height: 2em; + width: 100px; +} + +#ItemContainer #Summary #PublicDomainPurchase #BuyForFree .Button:hover { + background-color: #6e99c9; + border: solid 1px #000; +} + +#ItemContainer #Summary #PublicDomainPurchase #BuyForFree a:hover { + color: #fff; +} + +#ItemContainer #Summary #RobuxPurchase #PriceInRobux { + color: Green; + float: left; + font-weight: bold; + line-height: 2em; + width: 100px; +} + +#ItemContainer #Summary #RobuxPurchase #BuyWithRobux { + float: left; + line-height: 2em; + width: 100px; +} + +#ItemContainer #Summary #RobuxPurchase #BuyWithRobux .Button:hover { + background-color: #49b745; + border: solid 1px #000; +} + +#ItemContainer #Summary #RobuxPurchase #BuyWithRobux a:hover { + color: #fff; +} + +#ItemContainer #Summary #TicketsPurchase { + clear: left; +} + +#ItemContainer #Summary #TicketsPurchase #PriceInTickets { + color: #fbb117; + float: left; + font-weight: bold; + line-height: 2em; + width: 100px; +} + +#ItemContainer #Summary #TicketsPurchase #BuyWithTickets { + float: left; + line-height: 2em; + width: 100px; +} + +#ItemContainer #Summary #TicketsPurchase #BuyWithTickets .Button:hover { + background-color: #fdd017; + border: solid 1px #000; +} + +#ItemContainer #Summary #TicketsPurchase #BuyWithTickets a:hover { + color: #fff; +} + +#ItemContainer #Configuration { + background-color: #fff; + border-bottom: dashed 1px #555; + border-left: dashed 1px #555; + border-right: dashed 1px #555; + clear: right; + float: right; + margin-left: 10px; + margin-top: -10px; + padding: 5px 10px; + text-align: center; + width: 249px; +} + +.ItemVerb { + background-color: #fff; + border: dashed 1px #555; + text-align: center; + height: 20px; + margin-top: 5px; +} + +#ItemContainer .Ownership { + background-color: #ccc; + border: dashed 1px #f00; + clear: right; + color: #f00; + float: right; + margin-left: 10px; + margin-top: 0; + padding: 10px 10px; + text-align: center; + width: 230px; +} + +#ItemContainer .PlayGames { + background-color: #ccc; + border: dashed 1px Green; + color: Green; + margin-top: 10px; + padding: 10px 5px; + text-align: center; + width: 408px; +} + +#ItemContainer .BadgeStats { + width: 408px; + padding: 10px 5px; +} + +#ItemContainer .RunningGames { + background-color: #ccc; + border: dashed 1px #555; + color: #555; + margin-top: 10px; + padding: 10px 5px; + text-align: center; + width: 408px; +} + +#ItemContainer .GameInstances { + background-color: #fff; + border: solid 1px #000; + color: #555; + width: 408px; +} + +#ItemContainer .RefreshRunningGames { + margin: 10px 0; + text-align: center; +} + +#ItemContainer #Ownership .Button, +#ItemContainer .PlayGames .Button { + background-color: #fff; +} + +#ItemContainer #Ownership .Button:Hover { + background-color: #fff; + border: solid 1px #f00; + color: #f00; +} + +#ItemContainer .PlayGames .Button:Hover { + background-color: #fff; + border: solid 1px Green; + color: Green; +} + +#ItemContainer .CommentsContainer, +#ItemContainer .TabbedInfoContainer { + margin: 10px; + margin-top: 0; + width: 665px; +} + +#ItemContainer .TabbedInfoContainer h3 { + padding: 5px; +} + +#ItemContainer .CommentsContainer .HeaderPager, +#ItemContainer .CommentsContainer .FooterPager { + padding: 5px 0; + text-align: right; +} + +#ItemContainer .CommentsContainer .Comments { + border: dashed 1px #555; + overflow: hidden; + width: 663px; +} + +#ItemContainer .CommentsContainer .Comment, +#ItemContainer .CommentsContainer .AlternateComment { + padding: 7px 10px; +} + +#ItemContainer .CommentsContainer .Comment { + background-color: #fff; +} + +#ItemContainer .CommentsContainer .AlternateComment { + background-color: #eee; +} + +#ItemContainer .CommentsContainer .Commenter { + float: left; + width: 110px; +} + +#ItemContainer .CommentsContainer .Avatar { + border: solid 1px #555; + height: 100px; + width: 100px; +} + +.Avatar { + padding: 0 0 8px 0; +} + +#ItemContainer .CommentsContainer .Post { + float: left; + width: 80%; +} + +#ItemContainer .CommentsContainer .Content { + margin: 10px 0; + overflow: hidden; +} + +#ItemContainer .CommentsContainer .PostAComment { + margin: 10px 0 0 0; +} + +#ItemContainer .CommentsContainer .PostAComment .Buttons { + margin: 10px 0 0 0; +} + +#ItemContainer .CommentsContainer .MultilineTextBox, +#ItemContainer .CommentsContainer textarea { + min-height: 0; + width: 400px; +} + +#EditItem { + color: #555; + float: left; + font-family: Verdana, Sans-Serif; + margin: 0; +} + +#EditItemContainer h2 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-family: Comic Sans MS, Sans-Serif; + font-size: x-large; + margin: 0; + text-align: center; +} + +#EditItemContainer fieldset { + font-size: 1.2em; + margin: 0; + color: #000; +} + +#EditItemContainer #Confirmation { + border: dashed 1px #f00; + background-color: #ccc; + color: #f00; + margin: 0 auto; + margin-top: 10px; + padding: 10px 5px; + width: 410px; +} + +#EditItemContainer #ItemName { + margin: 0 auto; + margin-top: 10px; + padding: 0; + text-align: left; + width: 420px; +} + +#EditItemContainer #ItemThumbnail { + border: solid 1px #555; + height: 230px; + margin: 0 auto; + margin-top: 10px; + padding: 0; + text-align: left; + width: 420px; +} + +#EditItemContainer #ItemDescription { + margin: 0 auto; + margin-top: 10px; + padding: 0; + text-align: left; + width: 420px; +} + +#EditItemContainer #Comments, +#EditItemContainer #PlaceAccess, +#EditItemContainer #PlaceCopyProtection, +#EditItemContainer #AllowGear, +#EditItemContainer #SetGenres, +#EditItemContainer #VersionHistory, +#EditItemContainer #PublicDomain, +#EditItemContainer #SellThisItem, +#EditItemContainer #PlaceReset, +#EditItemContainer #PlaceBuildAccess, +.MyItemOptions { + margin: 0 auto; + margin-top: 10px; + width: 420px; +} + +#EditItemContainer #SellThisItem #Pricing { + background-color: #fff; + border: dashed 1px #000; + margin: 15px 5px 5px 5px; + padding: 5px; +} + +#EditItemContainer #SellThisItem #Price { + margin-top: 10px; +} + +#EditItemContainer #SellThisItem #Price .TextBox { + padding: 2px 4px; + width: 75px; +} + +#EditItemContainer .CopyProtectionRow, +#EditItemContainer .EnableCommentsRow, +#EditItemContainer .PlaceAccessRow, +#EditItemContainer .PublicDomainRow, +#EditItemContainer .SellThisItemRow, +#EditItemContainer .ResetPlaceRow { + font-size: .9em; + margin: 10px 0; + text-align: center; +} + +#EditItemContainer .PlaceAccessRow { + margin: 10px 0 10px 100px; + text-align: left; +} + +#ConfigurePlaceContainer .ResetPlaceRow .Button { + margin: 0 auto; +} + +#EditItemContainer .PricingLabel { + float: left; + font-weight: bold; + margin-right: 5px; + text-align: right; + width: 155px; +} + +#EditItemContainer .PricingField_Robux { + float: left; + margin-left: 5px; + text-align: left; + width: 110px; +} + +#EditItemContainer .PricingField_Tickets { + float: left; + margin-left: 5px; + text-align: left; + width: 110px; +} + +#EditItemContainer .Buttons { + margin: 0 auto; + margin-top: 10px; + margin-bottom: 10px; + text-align: center; +} + +#EditItemContainer .Button { + border-color: #555; + color: #555; + cursor: pointer; +} + +#EditItemContainer .Button:hover { + background-color: #6e99c9; + color: #fff; +} + +#EditItemContainer .Label { + font-size: 1.2em; + margin: 0; + padding: 0; +} + +#EditItemContainer .TextBox { + border: dashed 1px #555; + margin: 0; + padding: 5px 10px; + width: 400px; +} + +#EditItemContainer .Multiline { + border: dashed 1px #555; + margin: 0; + padding: 5px 10px; + width: 400px; +} + +#EditItemContainer .Suggestion { + font: normal .8em/normal Verdana, sans-serif; + padding-left: 9px; +} + +#ItemContainer .Ads_WideSkyscraper, +#EditItemContainer .Ads_WideSkyscraper { + border: solid 1px #000; + float: right; + text-align: right; + width: 160px; +} + +.GroupBuildRunningGameItem { + border: solid 2px #50F; +} + +.MultiplayerVisit { + background: url(/images/Play.png); + width: 250px; + height: 48px; +} + +.SoloVisit { + background: url(/images/PlaySolo.png); + width: 143px; + height: 48px; +} + +.SoloVisitText { + display: none; +} + +.BuildSolo { + background: url(/images/BuildSolo2.png); + width: 143px; + height: 48px; +} + +.EditButton { + background: url(/images/EditMode2.png); + width: 143px; + height: 48px; +} + +.PlaceInfoIcons { + text-align: center; + margin: 1em 5px; +} + +.iPublic { + background: url(/images/public.png); + display: inline-block; + width: 16px; + height: 16px; +} + +.iLocked { + background: url(/images/locked.png); + display: inline-block; + width: 16px; + height: 16px; +} + +.iUnlocked { + background: url(/images/unlocked.png); + display: inline-block; + width: 16px; + height: 16px; +} + +.SharedIcon { + background: url(/images/Shared.png); + display: inline-block; + width: 16px; + height: 16px; +} + +.CopyLockedIcon { + background: url(/images/CopyLocked.png); + display: inline-block; + width: 16px; + height: 16px; +} + +.AllGearIcon { + background: url(/images/Suitcase16x16.png); + display: inline-block; + width: 16px; + height: 16px; +} + +.GenreGearIcon { + background: url(/images/GenreSuitcase16x16.png); + display: inline-block; + width: 16px; + height: 16px; +} + +.NoGearIcon { + background: url(/images/NoSuitcase16x16.png); + display: inline-block; + width: 16px; + height: 16px; +} + +#BadgeStatsHeader { + width: 388px; +} + +.item-header h1 { + margin: 0; + padding: 0; + font-size: 16px; + font-style: inherit; + display: inline; +} + +.section { + padding: 8px 0 0 0; +} + +.expires-div { + margin: 16px 0 8px 0; +} + +#timer { + color: Red; + margin: 8px 0; +} + +.item-detail div, +.creator-name { + line-height: 1.5em; +} + +#assetContainer, +#placeContainer { + float: left; + width: 420px; + overflow: hidden; +} + +.updateSetsDiv { + float: right; + width: 248px; + border: 2px dashed maroon; + margin-top: 5px; +} + +.newVersionMsg { + padding: 5px 0 5px 0; + text-align: center; + color: Yellow; + background-color: Maroon; + float: right; + width: 100%; +} + +#updateSetContainer { + padding: 5px; + float: right; + width: 100%; +} + +#updateSetContainer p { + cursor: pointer; + font-size: 12px; + float: right; + width: 100%; +} + +.resaleError { + padding: 5px; + background-color: #F00; +} + +.resaleConfirmation { + padding: 5px; + background-color: #0F0; +} + +.sellCollectibleMsg { + font-family: Verdana, Helvetica, sans-serif; + font-weight: bold; + font-size: 14px; +} + +.groupBuildingGameText { + font-size: 16px; + font-weight: bold; + font-style: italic; + line-height: 24px; +} + +#ProcessPurchase_Free, +#ProcessPurchase_Robux, +#ProcessPurchase_Tickets, +#ProcessRenew_Free, +#ProcessRenew_Robux, +#ProcessRenew_Tickets, +#ProcessROBLOXPurchase { + margin: 2.5em auto; + display: none; +} + +#Processing_Free, +#Processing_Robux, +#Processing_Tickets, +#Processing_FreeRenew, +#Processing_RobuxRenew, +#Processing_TicketsRenew, +.processingMsg { + margin: 0 auto; + text-align: center; + vertical-align: middle; +} + +.createSetPanelPopup { + width: 400px; + height: 100%; + padding: 0; + float: left; + display: none; +} + +.GetAFreeAccount:hover { + background-position: 0 56px; +} + +.GetAFreeAccount { + width: 316px; + height: 56px; + background: url(/images/Buttons/getAFreeAccount.png); +} + +.PlayAsGuest:hover { + background-position: 0 56px; +} + +.PlayAsGuest { + width: 316px; + height: 56px; + background: url(/images/Buttons/playAsGuest.png); +} + +.closeBtnCircle_35h:hover { + background-position: 0 35px; +} + +.closeBtnCircle_35h { + width: 35px; + height: 35px; + background: url(/images/Buttons/closeBtnCircle_35h.png); +} + +.fblike { + display: inline-block; + float: left; + background-color: White; +} + +.LinkCountContainer { + width: 200px; + margin: 0; + padding: 5px; +} + +.LinkStatusImage { + float: left; +} + +#ManageAccountButton img, +#CancelButtonImg, +#ChangeCreditCardInfoImg { + border: none; +} + +#ManageAccountButton { + text-align: center; +} + +#GoTurboPopupPanel, +#TurnOffTurboPopupPanel { + width: 550px; + text-align: center; +} + +#CurrentAccountUpgrades { + width: 90%; + margin: auto; + text-align: center; +} + +#CurrentAccountUpgrades table { + border-collapse: collapse; + margin-bottom: 15px; + text-align: center; + background-color: #d0d6e0; + width: 225px; + margin-left: auto; + margin-right: auto; +} + +#CurrentAccountUpgrades th { + border-bottom: solid 1px #999; + text-align: center; +} + +.rightCellWall { + border: 1px solid #999; +} + +.CancelBuildersClubMembership, +.ChangeCreditCardInfo { + text-align: center; + margin-top: 5px; +} + +#BCCompareModal { + background-color: White; + border: solid 2px #6e99c9; + margin: 5px; + padding: 10px; +} + +#BuyBCComparePanelTopInfo { + text-align: center; + padding: 10px 40px 10px 40px; + width: 340px; +} + +.BuyBCComparePanelTable { + font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif; + font-size: 12px; + background: #fff; + width: 340px; + margin: 0 40px 0 40px; + border-collapse: collapse; + margin-bottom: 15px; +} + +.BCCompareHeaderRow { + color: #2163A5; + padding: 10px 8px; + border-bottom: 1px solid #D3D3D3; + text-align: left; +} + +.BuyBCComparePanelTable tr:hover td, +.BuyBCComparePanelTable tr:hover td { + color: Maroon; +} + +.BCCompareRowOdd td, +.BCCompareRowEven td { + color: #2163A5; + padding-top: 10px; + padding-left: 10px; + padding-bottom: 10px; +} + +.BCCompareRowOdd { + background: #e8edff; +} + +#BCCompareButtons { + text-align: center; + width: 340px; + margin: 0 40px 0 40px; +} + +#upgrades-membership-options .leftBorder { + border-left: 1px solid #D3D3D3; +} + +#upgrades-membership-options .odd #upgrades-membership-options .LeftText { + text-align: left; +} + +.daysConversion { + color: Red; +} + +.AspNet-Login input { + font-size: 1em; +} + +.AspNet-Login label em { + text-decoration: underline; + font-style: normal; +} + +.AspNet-Login .AspNet-Login-FailurePanel { + color: #F00; +} + +.AspNet-Login .AspNet-Login-UserPanel, +.AspNet-Login .AspNet-Login-PasswordPanel, +.AspNet-Login .AspNet-Login-RememberMePanel, +.AspNet-Login .AspNet-Login-SubmitPanel { + padding: .25em .1em 0 0; +} + +.AspNet-Login .AspNet-Login-UserPanel, +.AspNet-Login .AspNet-Login-PasswordPanel, +.AspNet-Login .AspNet-Login-SubmitPanel { + text-align: left; +} + +.AspNet-Login .AspNet-Login-UserPanel label, +.AspNet-Login .AspNet-Login-PasswordPanel label, +#PaneLogin .TextboxLabel { + font-weight: bold; +} + +.AspNet-Login .AspNet-Login-UserPanel input, +.AspNet-Login .AspNet-Login-PasswordPanel input { + width: 9em; +} + +#PaneNewUser { + float: right; + width: 170px; + background-color: #dcdcdc; + padding: 0 22px 22px; +} + +#PaneLogin { + width: 18em; + padding: 0; +} + +#PaneLogin .AspNet-Login div { + margin: 10px; +} + +#LoginView { + border: solid 1px Black; + width: 150px; + height: 250px; +} + +#LoginView h5 { + background-color: #ccc; + border-bottom: solid 1px #000; + margin: 0; +} + +#LoginView #AlreadySignedIn { + background-color: #eee; +} + +#LoginView .Label { + font-weight: bold; +} + +#LoginView .Text { + width: 133px; +} + +#LoginView .AspNet-Login { + height: 225px; + background-color: #eee; +} + +#LoginView .AspNet-Login .AspNet-Login-InstructionPanel, +#LoginView .AspNet-Login .AspNet-Login-HelpPanel, +#LoginView .AspNet-Login .AspNet-Login-UserPanel, +#LoginView .AspNet-Login .AspNet-Login-PasswordPanel, +#LoginView .AspNet-Login .AspNet-Login-RememberMePanel { + padding: 3px 5px 3px 5px; + text-align: left; +} + +#LoginView .AspNet-Login .AspNet-Login-SubmitPanel, +#LoginView .AspNet-Login .AspNet-Create-Account { + padding: 10px 5px 5px 10px; + text-align: center; +} + +#LoginView .AspNet-Login .AspNet-Login-PasswordRecoveryPanel { + padding: 5px 5px 5px 5px; + text-align: center; +} + +#LoginView .AspNet-Login .AspNet-Login-PasswordRecoveryPanel a { + color: #999; + font: normal 9px/normal Verdana, sans-serif; + padding: 5px 5px 5px 5px; + text-align: center; +} + +#LoginView .AspNet-Login .AspNet-Login-PasswordRecoveryPanel a:hover { + color: Blue; +} + +#Sidebars { + float: right; + width: 250px; +} + +#AlreadyRegistered, +#TermsAndConditions { + background-color: #eee; + border: solid 1px #000; + color: #555; + font: normal 12px/normal Verdana, sans-serif; + margin-top: 10px; + padding: 0 20px 10px 20px; +} + +#AlreadyRegistered h3, +#TermsAndConditions h3 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-weight: bold; + margin: 0 -20px 0 -20px; + padding: 4px; + text-align: center; +} + +#TermsAndConditions { + margin-top: 20px; +} + +.Registration { + background-color: #eee; + border: solid 1px #000; + color: #555; + float: left; + margin-top: 10px; + width: 620px; +} + +.Registration h2 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-size: x-large; + margin: 0; + text-align: center; +} + +.Registration h3 { + margin: 10px 0 0 0; + text-align: center; +} + +.Registration fieldset { + font-size: 1.2em; + margin: 15px 0 0 0; +} + +.Registration .TextBox { + vertical-align: middle; + width: 150px; +} + +.Registration .Label { + vertical-align: middle; +} + +.Registration #EnterUsername, +.Registration #EnterPassword, +.Registration #EnterEmail, +.Registration #EnterAgeGroup, +.Registration #EnterChatMode { + margin: 0 auto; + width: 60%; +} + +.Registration .UsernameRow, +.Registration .PasswordRow, +.Registration .ConfirmPasswordRow, +.Registration .EmailRow { + height: 5em; + line-height: 5em; + padding: 3px; + text-align: right; +} + +.Registration .PasswordRow, +.Registration .ConfirmPasswordRow { + height: 3em; + line-height: 3em; +} + +.Registration .AgeGroupRow, +.Registration .ChatModeRow { + font-size: .9em; + margin: 10px 0 10px 100px; +} + +.Registration .Confirm { + margin: 20px 0 20px 0; + text-align: center; +} + +.Registration .Validators { + margin-left: 9px; +} + +.Registration .Legend { + color: Blue; + margin-left: 9px; +} + +.Registration .Suggestion { + font: normal .8em/normal Verdana, sans-serif; + padding-left: 9px; +} + +.Registration label { + margin-right: 5px; +} + +.Registration input { + width: 9em; +} + +.AgeOptions { + margin: 0 auto; + margin-top: 20px; + width: 490px; +} + +.AgeOptions #Under13, +.AgeOptions #Over12 { + margin: 0; + padding: 0 20px; + width: 200px; + text-align: center; +} + +.AgeOptions #ParentAccount { + margin: 0; + padding: 0 0 0 40px; + width: 400px; + text-align: center; +} + +#AgeOptions .Label { + text-align: center; +} + +.MessageContainer .MultilineTextBox { + min-height: 50px; +} + +.MessageContainer #AdsPane { + border: solid 1px #000; + float: left; + width: 160px; +} + +.MessageContainer #MessagePane { + float: left; + margin: 0 0 0 60px; + width: 650px; +} + +.MessageContainer h3 { + text-align: left; + width: 622px; +} + +.MessageContainer #MessagePane .Buttons { + width: 622px; +} + +.MessageContainer #MessagePane .Buttons .Button { + margin: 10px 0 0 10px; +} + +.MessageContainer .Label { + font-weight: bold; + padding: 6px 0 3px 0; +} + +.MessageContainer .MessageReaderContainer { + border: solid 1px #000; + padding: 10px; + width: 95%; +} + +.MessageReaderContainer #Message { + text-align: left; +} + +#Message #DateSent { + text-align: left; +} + +#Message #Author { + margin: 0; + text-align: left; +} + +#Message #Subject { + display: inline-block; + *display: inline; + font-weight: bold; + margin: 0; + text-align: center; + width: 350px; + *zoom: 1; +} + +#Message .Body { + text-align: left; + vertical-align: top; +} + +#MessageEditorContainer { + border: solid 1px #000; + padding: 10px; + width: 95%; +} + +.EmptyInbox { + text-align: center; + margin: 20px 0; +} + +.MessageEditor { + text-align: left; +} + +.MessageEditor #From { + text-align: left; + width: 39%; +} + +.MessageEditor #To { + margin: 5px 0 0 0; + text-align: left; + width: 39%; +} + +.MessageEditor .CannedResponsesPanel { + background-color: #eee; + border: solid 1px #000; + margin: 30px 0; + width: 200px; +} + +.MessageEditor .CannedResponsesPanel h4 { + background-color: #ccc; + border-bottom: solid 1px #000; + font-size: 1.3em; + margin: 0; + text-align: center; + display: block; +} + +.MessageEditor #CannedResponses { + margin: 0; + padding: 5px 0; + width: 200px; +} + +.MessageEditor .CannedResponse { + margin: 0; + padding: 7px 5px; + text-align: center; + width: 190px; +} + +.MessageEditor #CannedResponses .Button { + padding: 3px 5px; +} + +.MessageEditor .Body { + text-align: left; + vertical-align: top; +} + +.MessageContainer #Confirmation h3 { + text-align: left; + width: 422px; +} + +.MessageContainer #Confirmation .Buttons { + width: 422px; +} + +.MessageContainer #Confirmation #Message { + border: solid 1px #000; + padding: 10px; + width: 95%; +} + +#InvitationContainer #AdsPane { + border: solid 1px #000; + float: left; + width: 160px; +} + +#InvitationContainer #InvitationPane { + float: left; + margin: 0 0 0 60px; + width: 650px; +} + +#InvitationContainer h3 { + text-align: left; + width: 622px; +} + +#InvitationContainer .Buttons { + width: 622px; +} + +#InvitationContainer .Button { + float: right; + font-family: Verdana, Sans-Serif; + padding: 3px 10px 3px 10px; + text-decoration: none; +} + +#InvitationContainer .TextBox { + border-color: Gray; + border-style: dashed; + padding: 5px; + width: 98%; +} + +#InvitationContainer .Label { + font-weight: bold; +} + +#InvitationContainer .MessageReaderContainer { + border-style: solid; + border-width: 1px; + border-color: #000; + padding: 10px; + width: 95%; +} + +.MessageReaderContainer #Message { + float: left; + text-align: left; +} + +#InvitationContainer #MessageEditorContainer .MessageEditor .CannedResponsesPanel { + display: none; +} + +#InvitationContainer #Confirmation h3 { + text-align: left; + width: 422px; +} + +#InvitationContainer #Confirmation .Buttons { + width: 422px; +} + +#InvitationContainer #Confirmation #Message { + border: solid 1px #000; + margin: 10px; + padding: 10px; + width: 95%; +} + +.ReportAbuse { + position: relative; + text-align: left; +} + +.ReportAbuse .AbuseButton a { + color: #F99; + background: none; + padding-left: 16px; + padding-bottom: 2px; +} + +.ReportAbuse .AbuseButton a:hover { + background: url("/images/css/abuse.png") no-repeat scroll 0 2px transparent; + color: #F00; +} + +.ReportAbuse img { + display: none; +} + +#ParentsContainer #BreadcrumbsContainer { + margin-bottom: 20px; +} + +#ParentsContainer h2 { + font-family: Verdana, Sans-Serif; + font-size: 2.5em; + font-weight: normal; + line-height: 1em; + margin: 0 0 20px 0; +} + +#ParentsContainer #LeftColumn { + float: left; + padding: 0 15px 0 0; + width: 400px; +} + +#ParentsContainer #RightColumn { + float: right; + padding: 0 0 0 15px; + width: 400px; +} + +#ParentsContainer .ParentsSection { + background-color: #fff; + border: solid 1px #ccc; + height: 120px; + margin-bottom: 20px; + padding: 15px 15px; + width: 370px; +} + +#ParentsContainer h3, +dt { + color: Blue; + font-family: Verdana, Sans-Serif; + font-size: 1.3em; + font-weight: normal; + letter-spacing: .1em; + line-height: 1em; +} + +#ParentsContainer .SectionIcon { + float: left; + margin-right: 20px; +} + +#ParentsContainer .PageImage { + float: right; +} + +#partycontainer { + bottom: 110px; + right: 10px; +} + +.partyWindow { + color: #666; + font-family: Verdana, Geneva, sans-serif; + font-size: 11px; + width: 250px; +} + +.partyWindow .title { + background: transparent url('/images/friendsbar/tab_blue19h_l.gif') no-repeat left top; + display: block; + text-decoration: none; + padding-left: 2px; + height: 19px; + width: 248px; + cursor: pointer; +} + +.partyWindow .title span { + background: transparent url('/images/friendsbar/tab_blue19h_r.gif') no-repeat right top; + display: block; + height: 15px; + padding: 2px 15px 2px 7px; + text-decoration: none; + color: #fff; +} + +.partyWindow .title_flash { + background: transparent url('/images/friendsbar/tab_white19h_l2.gif') no-repeat left top; +} + +.partyWindow .title_flash span { + background: transparent url('/images/friendsbar/tab_white19h_r2.gif') no-repeat right top; + color: #444; +} + +.partyWindow .title strong { + display: block; + padding: 2px 15px 4px 6px; + background: url("/images/chat/tab_blue21h_r.png") no-repeat right top; + color: #fff; + width: 227px; + font-weight: bold; +} + +.partyWindow .closeparty { + width: 10px; + height: 9px; + margin: 5px 9px 0 0; + cursor: pointer; + position: absolute; + right: 0; + top: 0; + color: #fff; + font-weight: bold; + font-size: 14px; +} + +.partyWindow .main { + clear: both; + width: 248px; + height: auto; + margin: 0; + background: #f2f2f2; + border: 1px solid #a6a6a6; + border-top: 0 none; + overflow: auto; +} + +.partyWindow .kickuser { + float: right; + padding-right: 5px; + color: Red; + cursor: pointer; +} + +#new_party p { + text-align: center; + padding: 40px 0 0 0; +} + +#party_none .main .btn_green21h { + margin: 15px 0 0 77px; +} + +.clear { + clear: both; +} + +.main #new_party_clear { + padding: 40px 0 0 0; +} + +.btn_green21h { + float: left; + background: url("/images/chat/btn_green21h_l.png") no-repeat left top; + padding: 0 0 0 2px; +} + +.btn_green21h a { + display: block; + padding: 2px 14px 4px 10px; + background: url("/images/chat/btn_green21h_r.png") no-repeat right top; + color: White; + font-family: verdana; + font-weight: bold; + text-decoration: none; +} + +.btn_green21h:hover { + background: url("/images/chat/btn_green21h_over_l.png") no-repeat left top; +} + +.btn_green21h:hover a { + background: url("/images/chat/btn_green21h_over_r.png") no-repeat right top; +} + +.btn_red21h { + float: left; + background: url("/images/chat/btn_red21h_l.png") no-repeat left top; + padding: 0 0 0 2px; +} + +.btn_red21h a { + display: block; + padding: 2px 14px 4px 10px; + background: url("/images/chat/btn_red21h_r.png") no-repeat right top; + color: White; + font-family: verdana; + font-weight: bold; + text-decoration: none; +} + +.btn_red21h:hover { + background: url("/images/chat/btn_red21h_over_l.png") no-repeat left top; +} + +.btn_red21h:hover a { + background: url("/images/chat/btn_red21h_over_r.png") no-repeat right top; +} + +.btn_black21h { + float: left; + background: url("/images/chat/btn_black21h_l.png") no-repeat left top; + padding: 0 0 0 2px; + color: White; +} + +.btn_black21h a { + display: block; + padding: 2px 14px 4px 10px; + background: url("/images/chat/btn_black21h_r.png") no-repeat right top; + color: #FFF; + font-family: verdana; + font-weight: bold; + text-decoration: none; +} + +.btn_black21h:hover { + background: url("/images/chat/btn_black21h_over_l.png") no-repeat left top; +} + +.btn_black21h:hover a { + background: url("/images/chat/btn_black21h_over_r.png") no-repeat right top; +} + +.main h1 { + padding: 15px 20px 15px 20px; + font-size: 130%; + text-align: center; +} + +.main #invite_status { + padding: 10px 0 10px 0; +} + +.main p { + padding: 0 0 7px 0; +} + +.main .btn_green21h { + float: left; + margin: 0 0 0 35px; +} + +.main .btn_black21h { + float: right; + margin: 0 35px 0 0; +} + +.main #invite_clear { + padding: 15px 0 0 0; +} + +dt { + float: left; +} + +dd { + margin-left: 30px; +} + +.grey9 { + color: gray; + font-size: 9px; +} + +.status { + color: gray; + font-size: 11px; +} + +.name_me { + font-weight: bold; + color: #06c; +} + +.name_other { + font-weight: bold; + color: #007b00; +} + +.name_status { + font-weight: bold; +} + +.partyWindow { + color: black; + font-size: 11px; + height: auto; +} + +.members dl { + padding: 0 0 0 5px; +} + +.members dt { + padding: 4px 0 0 0; +} + +.members dd { + padding: 4px 0 1px 0; +} + +.main p { + padding: 10px 0 5px 0; + text-align: center; +} + +#chat_messages { + padding: 0 3px 3px 3px; + margin: 5px 5px 0 5px; + height: 217px; + overflow: auto; + background-color: white; + border-style: solid; + border-width: 1px; + border-color: #aaa; +} + +#chat_messages li { + padding: 6px 0 0 0; + list-style-type: none; +} + +#party_game_thumb { + width: 75px; + margin-right: 5px; + float: left; +} + +#party_current_game { + margin: 5px; +} + +#party_game_name { + width: 140px; + float: left; +} + +#party_game_follow_me { + margin-top: 5px; +} + +#chat_input { + margin: 5px 5px 0 5px; + padding-right: 2px; +} + +#chat_input input { + border: 1px solid #ccc; + width: 236px; + height: 40px; +} + +#chat_input textarea { + border: 1px solid #aaa; + overflow: auto; + width: 100%; + height: 50px; +} + +.main #leader_clear { + padding: 15px 0 0 0; +} + +#party_my .main .btn_black21h { + margin: 15px 70px 0 0; +} + +.GuestPlayAvatarImage { + border: solid 3px green; +} + +.GuestPlayAvatarImage:Hover { + border: solid 3px #0C0; +} + +#ConfigurePlaceContainer { + background-color: #eee; + border: solid 1px #000; + color: #555; + margin: 0 auto; + width: 620px; +} + +#ConfigurePlaceContainer h2 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-size: x-large; + margin: 0; + text-align: center; +} + +#ConfigurePlaceContainer fieldset { + font-size: 1.2em; + margin: 0; +} + +#ConfigurePlaceContainer #PlaceName { + margin: 0 auto; + margin-top: 10px; + padding: 0; + text-align: left; + width: 420px; +} + +#ConfigurePlaceContainer #PlaceThumbnail { + border: solid 1px #555; + height: 230px; + margin: 0 auto; + margin-top: 10px; + padding: 0; + text-align: left; + width: 420px; +} + +#ConfigurePlaceContainer #PlaceDescription { + margin: 0 auto; + margin-top: 10px; + padding: 0; + text-align: left; + width: 420px; +} + +#ConfigurePlaceContainer #PlaceAccess, +#ConfigurePlaceContainer #PlaceCopyProtection, +#ConfigurePlaceContainer #Comments, +#ConfigurePlaceContainer #PlaceIsDefault, +#ConfigurePlaceContainer #PlaceReset, +#ConfigurePlaceContainer #AllowGear, +#ConfigurePlaceContainer #SetGenres, +#ConfigurePlaceContainer #PlaceBuildAccess { + margin: 0 auto; + margin-top: 10px; + width: 420px; +} + +#ConfigurePlaceContainer .PlaceAccessRow, +#ConfigurePlaceContainer .CopyProtectionRow, +#ConfigurePlaceContainer .EnableCommentsRow, +#ConfigurePlaceContainer .PlaceIsDefaultRow, +.MyItemIndentedOption { + font-size: .9em; + margin: 10px 0 10px 100px; +} + +#ConfigurePlaceContainer .ResetPlaceRow { + font-size: .9em; + margin: 10px 0; + text-align: center; +} + +#ConfigurePlaceContainer .ResetPlaceRow .Button { + margin: 0 auto; +} + +#ConfigurePlaceContainer .Buttons { + margin: 0 auto; + margin-top: 10px; + margin-bottom: 10px; + text-align: center; +} + +#ConfigurePlaceContainer .Button { + border-color: #555; + color: #555; + cursor: pointer; +} + +#ConfigurePlaceContainer .Button:hover { + background-color: #6e99c9; + color: #fff; +} + +#ConfigurePlaceContainer .Label { + font-size: 1.2em; + margin: 0; + padding: 0; +} + +#ConfigurePlaceContainer .TextBox { + border: dashed 1px #555; + margin: 0; + padding: 5px 10px; + width: 400px; +} + +#ConfigurePlaceContainer .MultilineTextBox { + border: dashed 1px #555; + margin: 0; + padding: 5px 10px; + width: 400px; +} + +#ConfigurePlaceContainer .Suggestion { + font: normal .8em/normal Verdana, sans-serif; + padding-left: 9px; +} + +#ConfigurePlaceContainer .popupControl { + border-color: #000; +} + +#ConfigurePlaceContainer .PopUpOption { + font: normal .8em/normal Verdana, sans-serif; + padding: 4px; +} + +#ConfigurePlaceContainer .PopUpInstruction { + font: normal 1.1em/normal Verdana, sans-serif; + padding: 4px; + text-align: center; +} + +#Place_PlacePanel { + float: left; + width: 490px; + margin-right: 10px; +} + +#Place_AuthorPanel { + float: left; + width: 200px; +} + +#Place_GamesPanel { + margin-top: 10px; + width: 700px; + clear: left; +} + +#ConfigureShowcase { + font-family: Verdana, sans-serif; +} + +#ConfigureShowcase h2 { + font-size: 2.5em; + font-weight: normal; + line-height: 1em; + margin: 0; + padding: 0; +} + +#ConfigureShowcase .CallbackStyle { + border: thin blue inset; +} + +#ConfigureShowcase .DragHandle { + width: 161px; + height: 101px; + cursor: move; + border: outset 1px white; +} + +#ConfigureShowcase .ItemArea { + float: left; + font-size: 1.2em; + height: 82px; + padding: 10px; + text-align: left; + width: 500px; +} + +#ConfigureShowcase .ActionsArea { + float: left; + font-weight: bold; + height: 82px; + padding: 10px; + text-align: right; + width: 155px; +} + +#ConfigureShowcase .ReorderCue { + border: dashed thin black; + width: 100%; + height: 101px; +} + +#ConfigureShowcase ul, +#ConfigureShowcase ol { + margin: 0; +} + +#ConfigureShowcase li { + background: #EEE; + border: solid 1px #000; + color: #000; + list-style: none; + margin: 3px 0; + width: 100%; +} + +#ConfigureShowcase blockquote li { + border-style: none; + list-style-type: circle; + margin-left: 20px; +} + +.PlaceLauncherStatus { + color: #333; + display: none; + font-size: 16px; + font-weight: bolder; + line-height: 19px; +} + +.PlaceLauncherStatusBackBuffer { + position: relative; + display: none; +} + +.CancelPlaceLauncherButton { + background-color: White; + border: none; + color: Blue; + cursor: pointer; + font-size: 12px; +} + +.CancelPlaceLauncherButton:Hover, +.CancelPlaceLauncherButton:Active { + background-color: White; + border: none; + color: Blue; + cursor: pointer; + text-decoration: underline; +} + +.PlaceLauncherModal { + border: none; + color: Black; + height: 125px; + margin: 1.5em; + padding: 10px; + text-align: center; + width: 360px; +} + +#FeaturedGameButtonContainer { + border: none; + width: 330px; + height: 267px; +} + +.FeaturedGameButton { + cursor: pointer; + position: absolute; + right: 60px; + top: 28px; +} + +.VisitButtonsGuestCharacter { + display: inline-block; + *display: inline; + padding: 10px 5px; +} + +legend span { + color: #777; + line-height: 6px; +} + +#EditProfileContainer { + background-color: #eee; + border: solid 1px #000; + color: #555; + margin: 0 auto; + width: 620px; +} + +#EditProfileContainer h2 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-size: x-large; + margin: 0; + text-align: center; +} + +#EditProfileContainer h3 { + text-align: center; +} + +#EditProfileContainer fieldset { + font-size: 1.2em; + margin: 15px 0 0 0; +} + +#EditProfileContainer .MultilineTextBox { + width: 250px; +} + +#EditProfileContainer .TextBox { + vertical-align: middle; + width: 150px; +} + +#EditProfileContainer .Label { + vertical-align: middle; +} + +#EditProfileContainer #Confirmation { + border: dashed 1px #f00; + background-color: #ccc; + color: #f00; + font-family: Verdana, Sans-Serif; + margin: 0 auto; + margin-top: 10px; + padding: 10px 5px; + text-align: center; + width: 410px; +} + +#EditProfileContainer #AgeGroup, +#EditProfileContainer #ChatMode, +#EditProfileContainer #PrivacyMode, +#EditProfileContainer #ResetPassword, +#EditProfileContainer #Blurb { + margin: 0 auto; + width: 60%; +} + +#EditProfileContainer #EnterEmail { + margin: 0 auto; + width: 60%; + text-align: left; +} + +#EditProfileContainer .Buttons { + margin: 20px 0 20px 0; + text-align: center; +} + +#EditProfileContainer .AgeGroupRow, +#EditProfileContainer .ChatModeRow { + font-size: .9em; + margin: 10px 0 10px 100px; +} + +#EditProfileContainer .ResetPasswordRow { + margin: 10px 0; + text-align: center; +} + +#EditProfileContainer .BlurbRow { + padding: 10px 4px 10px 4px; + text-align: right; +} + +#EditProfileContainer .Legend { + color: Blue; + margin-left: 9px; +} + +#EditProfileContainer .Suggestion { + font: normal .8em/normal Verdana, sans-serif; + padding-left: 9px; +} + +#EditProfileContainer .Validators { + margin-left: 9px; +} + +.FrontPagePanel { + float: left; + border: solid 1px black; + margin: 5px; + background-color: White; +} + +#SignInPane { + border: none; + margin-left: 0; + width: 152px; + height: 250px; +} + +#Movie { + width: 424px; + height: 250px; +} + +#FrontPageRectangleAd { + margin: 5px 0 5px 5px; + width: 300px; + height: 250px; + background-color: Transparent; +} + +#SalesPitch { + margin-left: 0; + width: 586px; + height: 90px; +} + +#WhatsNew { + margin-left: 0; + width: 586px; + height: 280px; +} + +#RandomFacts { + float: right; + margin-right: 0; + width: 300px; + height: 150px; +} + +.RandomFactoid { + text-align: center; + height: 32px; + width: 290px; + padding: 2px; + overflow: hidden; +} + +#marqueecontainer { + position: relative; + width: 300px; + height: 100px; + background-color: white; + overflow: hidden; +} + +.RandomFactoid img { + float: left; +} + +#ParentsCorner { + margin-right: 0; + width: 300px; + height: 220px; + _height: 240px; +} + +#ParentsCorner #Inside { + padding: 10px; +} + +.ShieldImage { + float: left; + padding: 5px; +} + +.TrusteeSeal { + float: left; + width: 140px; + padding: 5px; +} + +#NewsFeeder { + margin-right: 0; + width: 158px; +} + +#FrontPageBannerAd { + margin-left: 0; + width: 728px; + height: 90px; + background-color: Transparent; +} + +.BadAdButton { + background-color: Transparent; + border: 0; + font-size: .8em; + font-family: Verdana; + padding: 0; + position: relative; + text-align: center; + height: 8px; + top: -2px; + right: 0; +} + +.BadAdButton:hover { + background-color: #fff; + border: solid 1px #000; + text-decoration: none; +} + +.Centered { + margin-left: auto; + margin-right: auto; +} + +.ShadowedStandardBox { + position: relative; + z-index: 0; + _padding-bottom: 6px; + _overflow-y: hidden; + margin-bottom: 10px; +} + +.ShadowedStandardBox .Header { + background: url(/images/HeaderGradientW800.png) repeat-y top left; + text-align: center; + color: White; + height: 20px; + line-height: 20px; + font-size: 15px; + font-weight: bold; + display: block; + position: relative; + z-index: 0; + white-space: nowrap; +} + +.ShadowedStandardBox .Content { + position: relative; + z-index: 0; + border: 2px solid #6e99c9; + background-color: White; + height: 100%; + _height: 3000px; + padding: 10px 10px 10px 10px; +} + +.Shadow { + display: block; + background: url(/images/ShadowAlpha.png) no-repeat bottom right!important; + background: #D3DEFF; + height: 100%; + _height: 3000px; + width: 100%; + position: absolute; + top: 6px; + left: 6px; + z-index: -1; +} + +.ShadowedStandardBox .Button { + cursor: pointer; + background-color: #B6CCE4; + color: #435D77; + text-decoration: none; + border: solid 1px #ccc; + padding: 3px 10px 3px 10px; + font-family: Verdana; + font-size: 10px; + font-weight: bold; + text-align: center; + white-space: nowrap; +} + +.ShadowedStandardBox .Button:link, +.ShadowedStandardBox .Button:visited { + background-color: #B6CCE4; + color: #435D77; + text-decoration: none; +} + +.ShadowedStandardBox .Button:hover, +.ShadowedStandardBox .Button:active { + background-color: #5F84A8; + color: White; + text-decoration: none; +} + +.OutlineBox { + z-index: 0; + position: relative; + margin-top: 16px; + padding-top: 14px; + margin-bottom: 10px; + border: solid 2px #B6CCE4; +} + +.OutlineBox .OB_HeaderPositioner { + z-index: 1; + position: absolute; + top: -16px; + left: 0; + width: 100%; +} + +.OutlineBox .OB_Header { + z-index: 1; + display: block; + width: 90%; + margin-left: auto; + margin-right: auto; + background-color: White; + border: solid 2px #B6CCE4; + text-align: center; + font-size: 18px; + font-weight: bold; + padding: 2px 2px 2px 2px; +} + +.OutlineBox .OB_Content { + padding-top: 5px; +} + +#InviteAFriendContainer { + margin-top: 10px; +} + +#InviteAFriendContainer h3 { + margin: 0 auto; + padding: 0 0 10px 0; + text-align: left; + width: 700px; +} + +#InviteAFriendContainer #Exposition { + margin: 0 auto; + padding: 0 0 10px 0; + width: 700px; +} + +#InviteAFriendContainer .Button { + border: solid 1px #000; + color: #000; + font-family: Verdana, Sans-Serif; + margin: 0 0 0 10px; + padding: 3px 10px 3px 10px; + text-decoration: none; +} + +#InviteAFriendContainer .MultilineTextBox { + border: 2px solid #CCC; + font-family: Arial, Sans-Serif; + line-height: 1.5em; + padding: 5px 5px 5px 5px; + width: 92%; +} + +#InviteAFriendContainer .TextBox { + border: 2px solid #CCC; + font-family: Arial, Sans-Serif; + padding: 5px 5px 5px 5px; + width: 92%; +} + +#InviteAFriendContainer .Label { + font-weight: bold; +} + +#InviteAFriendContainer #InvitationElements { + margin: 0 auto; + padding: 5px 5px 5px 5px; + width: 688px; +} + +#InviteAFriendContainer #Name, +#InviteAFriendContainer #Recipients, +#InviteAFriendContainer #Message { + margin: 15px 0 0 0; +} + +#InviteAFriendContainer .FormLabel { + float: left; + width: 94px; +} + +#InviteAFriendContainer .FormField { + float: left; + width: 317px; +} + +#InviteAFriendContainer .FormNotes { + float: right; + font-family: Verdana; + font-size: xx-small; + width: 277px; + text-align: left; +} + +#InviteAFriendContainer #Confirmation h3 { + margin: 0 auto; + text-align: left; + width: 400px; +} + +#InviteAFriendContainer #Confirmation #Message { + border: solid 1px #000; + margin: 0 auto; + padding: 10px 10px 10px 10px; + width: 380px; +} + +#InviteAFriendContainer #Confirmation .Buttons { + margin: 0 auto; + width: 400px; +} + +#ShareRobloxRibbon { + margin: 15px 0; + padding: 3px; + text-align: center; +} + +#ShareRobloxRibbon a { + text-decoration: none; + color: #000; +} + +.ShareRobloxButton { + padding: 4px; + margin: 4px 6px; + border: 3px solid #B2C1D2; + background: #A5D0FF; + color: #000; + cursor: pointer; + font-size: 16px; +} + +.ShareRobloxButtonCurrent { + padding: 4px; + margin: 4px 6px; + border: 3px solid #B2C1D2; + background: #527396; + color: #FFF; + cursor: pointer; + font-size: 16px; + text-decoration: none; +} + +.ShareRobloxButton:hover { + background: #527396; + color: #FFF; +} + +.clearing { + clear: both; +} + +#PleaseUpgradeMeContainer { + margin-top: 10px; +} + +#StoreContainer { + font-family: Verdana, Sans-Serif; +} + +#StoreContainer h2 { + font-family: Verdana, Sans-Serif; + font-size: 2.5em; + font-weight: normal; + letter-spacing: .5em; + line-height: 1em; + margin: 0; + padding: 0; +} + +#StoreContainer h3 { + font-family: Verdana, Sans-Serif; + font-size: 1.5em; + font-weight: normal; + letter-spacing: .1em; + line-height: 1em; + margin: 5px 0; + padding: 0; +} + +#StoreContainer ul { + list-style: none; + margin: 10px 0 30px 0; +} + +#StoreContainer ul li { + margin-bottom: .5em; +} + +#StoreContainer ul a { + font-size: 1.1em; +} + +#StoreContainer .DisplayFilters { + width: 150px; +} + +#StoreContainer #Products { + float: left; + padding-bottom: 10px; + padding-left: 0; + padding-right: 0; + width: 585px; +} + +#StoreContainer #Products #HeaderPager, +#StoreContainer #Products #FooterPager { + margin: 0 24px 0 10px; + padding: 2px 0; + text-align: right; +} + +#StoreContainer #Products #HeaderPager { + margin-bottom: 10px; +} + +#StoreContainer #Products #HeaderPager .Label, +#StoreContainer #Products #FooterPager .Label { + font-size: 1em; + vertical-align: middle; +} + +#StoreContainer #Products #AdditionalPlace { + margin: 0 auto; + width: 420px; +} + +#StoreContainer #AdsPane { + border: solid 1px #000; + float: right; + text-align: right; + width: 160px; +} + +#StoreContainer .Label, +#StoreContainer .Detail, +#StoreContainer .DetailHighlighted { + font-size: .8em; +} + +#StoreContainer .DetailHighlighted { + color: Red; + font-weight: bold; +} + +#StoreContainer .Thumbnail { + border: solid 1px #000; + height: 230px; + width: 420px; +} + +#StoreContainer .Price { + font-weight: bold; + margin: 5px 0; +} + +#StoreContainer .InsufficientFunds { + color: Red; +} + +.tipsy { + padding: 5px; + font-size: 10px; + opacity: .8; + filter: alpha(opacity=80); + background-repeat: no-repeat; + background-image: url(/images/css/tipsy.gif); +} + +.tipsy-inner { + padding: 5px 8px 4px 8px; + background-color: black; + color: white; + max-width: 200px; + text-align: center; +} + +.tipsy-inner { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} + +.tipsy-north { + background-position: top center; +} + +.tipsy-south { + background-position: bottom center; +} + +.tipsy-east { + background-position: right center; +} + +.tipsy-west { + background-position: left center; +} + +#CancelBuildersClubContainer, +#PaymentMethodsContainer, +#PaymentContainer, +#PayPalContainer, +#CashContainer { + background-color: #fff; + font-family: Arial, Sans-Serif; + margin: 0 auto; + padding: 20px 80px; +} + +#UpgradeCompleteContainer, +#CancelAccountUpgradeContainer, +#ManageAccountUpgradesContainer, +#AccountUpgradesConfirmationContainer { + background-color: #fff; + font-family: Arial, Sans-Serif; + margin: 0 auto; +} + +#AccountUpgradesConfirmationContainer, +#CancelAccountUpgradeContainer { + border: solid 2px #6e99c9; + padding: 10px 10px 20px 10px; +} + +#CancelBuildersClubContainer h2, +#PaymentMethodsContainer h2, +#PaymentContainer h2, +#PayPalContainer h2, +#CashContainer h2, +#UpgradeCompleteContainer h2, +#ManageAccountUpgradesContainer h2, +#CancelAccountUpgradeContainer h2, +#AccountUpgradesConfirmationContainer h2 { + font-family: Arial, Sans-Serif; + font-size: 2.5em; + font-weight: normal; + line-height: 1em; + margin: 0; + padding: 0; +} + +#UpgradeCompleteContainer h2, +#CancelAccountUpgradeContainer h2, +#ManageAccountUpgradesContainer h2, +#AccountUpgradesConfirmationContainer h2 { + font-size: 2em; + letter-spacing: .1em; + line-height: 1.5em; + margin: 0 auto; + margin-top: 10px; + width: 600px; +} + +#UpgradeCompleteContainer p, +#ManageAccountUpgradesContainer p, +#AccountUpgradesConfirmationContainer p { + line-height: 1.6em; +} + +#RobloxCentralBank { + border-bottom: solid 1px #000; +} + +#MembershipOptions .Label, +#SpecialMembershipOption .Label { + text-align: center; +} + +#WhyJoin { + display: inline; + float: left; + margin: 30px 10px 20px 90px; + padding: 0; + width: 375px; +} + +#WhyJoin h3 { + font-size: 15pt; + font-weight: normal; + letter-spacing: .2em; + margin: 0 0 15px 0; + padding: 0; +} + +#WhyJoin #MembershipBenefits { + list-style: none; + margin: 0; + padding: 0; +} + +#WhyJoin #MembershipBenefits li { + background-position: 0 0; + background-repeat: no-repeat; + font-family: Arial, Sans-Serif; + font-size: 11pt; + margin: 0 0 10px 10px; + min-height: 32px; + padding: 0 0 0 40px; +} + +#WhyJoin .MembershipBenefits { + list-style: none; + margin: 0; + padding: 0; +} + +#WhyJoin .MembershipBenefits li { + background-position: 0 0; + background-repeat: no-repeat; + font-family: Arial, Sans-Serif; + font-size: 11pt; + margin: 0 0 10px 10px; + min-height: 32px; + padding: 0 0 0 40px; +} + +#WhyJoin .MembershipBenefits .Benefit_MultiplePlaces { + background-image: url(/images/MultiplePlacesBullet.png); +} + +#WhyJoin .MembershipBenefits .Benefit_RobuxAllowance { + background-image: url(/images/AllowanceBullet.png); +} + +#WhyJoin .MembershipBenefits .Benefit_SellContent { + background-image: url(/images/SellBullet.png); +} + +#WhyJoin .MembershipBenefits .Benefit_SuppressAds { + background-image: url(/images/AdSuppressionBullet.png); +} + +#WhyJoin .MembershipBenefits .Benefit_ExclusiveHat { + background-image: url(/images/HardHatBullet.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_OwnPlace { + background-image: url(/images/JoinBulletHouse.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_GetTix { + background-image: url(/images/JoinBulletTreasure.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_BuyStuff { + background-image: url(/images/JoinBulletShoppingBag.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_CustomizeGuy { + background-image: url(/images/JoinBulletWizardHat.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_Username { + background-image: url(/images/JoinBulletStar.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_Forums { + background-image: url(/images/JoinBulletScript.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_Stats { + background-image: url(/images/JoinBulletStats.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_Comments { + background-image: url(/images/JoinBulletPencil.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_Badges { + background-image: url(/images/JoinBulletBadges.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_Friends { + background-image: url(/images/JoinBulletFriends.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_WeRock { + background-image: url(/images/JoinBulletCreative.png); +} + +#WhyJoin #MembershipBenefits #SignupBenefit_OhYeahItsFree { + background-image: url(/images/JoinBulletHappy.png); +} + +#SpecialMembershipOption { + display: inline; + float: right; + margin: 30px 69px 0 10px; + padding: 0; + width: 254px; +} + +#PaymentMethodsContainer .PaymentMethods { + border: none; + margin: 20px auto; + padding: 10px; + width: 600px; +} + +#PaymentMethodsHeader { + margin: 0 auto; + padding-left: 60px; + width: 600px; +} + +.PaymentMethodRow { + font-family: Arial, Helvetica, Sans-Serif; + background-color: transparent; + color: #090; +} + +.PaymentMethodRow:hover { + background-color: #f2f2f2; + cursor: pointer; + color: #00d900; +} + +.PaymentMethodRowUnavailable a { + color: #090; +} + +.PaymentMethodRow td, +.PaymentMethodRowUnavailable td { + border: none; + padding: 20px; +} + +#PaymentMethodsContainer .PaymentMethodName { + color: #333; + font-weight: bold; + font-size: medium; +} + +#Legend { + margin-top: 10px; +} + +#CurrentBalance { + color: #333; +} + +#PaymentContainer #Account, +#PaymentContainer #BillingInfo, +#PaymentContainer #ProductAndPricing, +#PaymentContainer #ProductAndPricing1, +#PaymentContainer #CreditCard, +#PayPalContainer #ConfirmDetails, +#CashContainer #ConfirmDetails, +#PayPalContainer #Notes, +#CashContainer #Notes { + margin-bottom: 20px; +} + +#PaymentContainer #Pay, +#PayPalContainer #Continue { + margin: 0 auto; + text-align: center; +} + +.PaymentDropDownList { + padding: 5px; + width: 95%; +} + +#PaymentContainer .Label, +#PayPalContainer .Label, +#CashContainer .Label { + float: left; + font-size: 1.25em; + height: 40px; + line-height: 40px; + padding: 0 10px; + vertical-align: middle; + width: 250px; +} + +#ConfirmDetails .Detail { + background-color: #EEE; + border-bottom: solid 1px #CCC; + border-top: solid 1px #CCC; + height: 40px; + line-height: 40px; +} + +#PaymentContainer .Field, +#PayPalContainer .Field, +#CashContainer .Field { + float: left; + height: 40px; + line-height: 40px; + padding: 0 10px; + vertical-align: middle; + width: 400px; +} + +#PaymentContainer .Button, +#PayPalContainer .Button { + font-size: 16px; + margin: 0 3px; +} + +#PaymentMethodsContainer .ExistingSubscription { + font-size: 16px; + color: Blue; + width: 50%; + text-align: center; +} + +#PayPalContainer .PayPalDisallowedMessage { + font-size: 16px; + padding-bottom: 12px; + color: Blue; + width: 90%; +} + +#ProductAndPricing, +#ProductAndPricing1 { + float: left; + width: 865px; +} + +#ProductAndPricing .TotalRowName, +#ProductAndPricing .TotalRowPrice { + font-size: 14px; + font-weight: bold; + padding-top: 10px; +} + +.TotalRowName, +.TotalRowPrice, +.ProductName, +.SuperchargeProductName, +.ProductPrice, +.SuperchargeProductPrice { + float: left; + font-weight: bold; +} + +.ProductName, +.TotalRowName, +.SuperchargeProductName { + width: 600px; +} + +.ProductPrice, +.TotalRowPrice, +.SuperchargeProductPrice { + width: 200px; +} + +.SuperchargeProductName, +.SuperchargeProductPrice { + color: #E6B800; +} + +#PaymentDetails #Account .Field, +#PaymentDetails #ProductAndPricing .Field, +#PayPalContainer #ConfirmDetails .Field, +#CashContainer #ConfirmDetails .Field { + font-size: 1.25em; + font-weight: bold; +} + +#PaymentDetailsTable { + width: 400px; +} + +#UpgradeCompleteContainer #Message, +#CancelAccountUpgradeContainer #Message, +#ManageAccountUpgradesContainer #CurrentAccountUpgrades, +#AccountUpgradesConfirmationContainer #Message { + background-color: #eee; + border: solid 1px #ccc; + margin: 0 auto; + margin-top: 15px; + padding: 10px; + width: 580px; +} + +#ManageAccountUpgradesContainer #CurrentAccountUpgrades { + margin-top: 25px; + font-family: Arial, Helvetica, Sans-Serif; +} + +.ExtensionNote { + margin: 10px 0; +} + +.UpgradeStatus { + font-weight: bold; + margin: 20px; + text-align: center; +} + +#BuildersClubContainer { + font-family: Arial, Sans-Serif; + margin: 0 auto; + width: 900px; +} + +#BuildersClubContainer #LeftColumn { + background-color: #fff; + width: 575px; + float: left; + margin-top: 10px; +} + +#BuildersClubContainer #LeftColumn #MembershipOptions { + margin-bottom: 50px; + padding: 10px 10px 0 10px; +} + +#BuildersClubContainer #LeftColumn #MembershipOptions .MembershipButton { + margin: 0 4px 0 4px; + float: left; + width: 130px; +} + +#BuildersClubContainer #LeftColumn #MembershipOptions .BCButtonLabel { + color: #6e99c9; + margin-top: 4px; + text-align: center; +} + +#BuildersClubContainer #LeftColumn h1 { + font-size: 20px; + color: #6e99c9; + font-style: italic; + font-weight: bold; +} + +#MembershipOptionsTable { + width: 500px; + margin: auto; +} + +#MembershipOptionsTable tr { + text-align: center; +} + +#MembershipOptionsTable td { + width: 100px; + margin: 38px; +} + +#MembershipOptionsTable td .BCButton { + padding-left: 35px; + padding-right: 0; +} + +#MembershipOptionsTable .BCText { + padding-right: 20px; + width: 150px; + text-align: left; +} + +.TurboSpan { + color: #72942E; +} + +#upgrades-membership-options { + font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif; + font-size: 13px; + background: #fff; + padding-top: 10px; + clear: left; + width: 100%; + border-collapse: collapse; + text-align: center; +} + +#upgrades-membership-options th { + font-size: 15px; + font-weight: normal; + color: #2163A5; + padding: 5px 8px; + border-bottom: 1px solid #D3D3D3; + line-height: 32px; +} + +#upgrades-membership-options th img { + float: left; +} + +#upgrades-membership-options td { + color: #2163A5; + padding: 5px 10px; +} + +#upgrades-membership-options tbody tr:hover td { + color: Maroon; +} + +#upgrades-membership-options .leftBorder { + border-left: 1px solid #D3D3D3; + width: 150px; +} + +#upgrades-membership-options .odd { + background: #e8edff; +} + +#upgrades-membership-options .LeftText { + text-align: left; +} + +#BuildersClubContainer #LeftColumn #WindowsOnlyWarning { + padding-left: 10px; + padding-bottom: 1px; +} + +#BuildersClubContainer #RightColumn { + margin: 10px 0 10px 5px; + width: 290px; + float: right; +} + +.RightColumnBox, +#UpgradeCompleteContainer { + border: 2px solid #6e99c9; + margin-bottom: 20px; + padding: 10px; + background-color: #fff; +} + +.RightColumnBox a { + text-decoration: underline; +} + +.RightColumnBox h2 { + float: left; + font-size: 14px; + color: Maroon; +} + +.RightColumnBox h3 { + text-align: left; + font-size: 11px; + clear: both; +} + +.RightColumnBox h1 { + float: left; + font-size: 16px; + color: Maroon; + padding-left: 10px; + font-weight: bold; +} + +.RightColumnManageAccount { + border-left: 2px solid #6e99c9; + border-bottom: 2px solid #6e99c9; + border-right: 2px solid #6e99c9; + background-color: #fff; + margin-bottom: 20px; +} + +#CancelMembership { + padding-top: 10px; + padding-bottom: 10px; + text-align: center; +} + +#RightColumn #ManageAccountBody { + padding: 10px; +} + +#RightColumn #ManageAccount #CancelMembershipButton, +#RedirectToLoginLink { + text-align: center; +} + +.OBCSellButton { + border: 0; + cursor: pointer; + top: 218px; + position: absolute; +} + +.BuyRobuxBtn { + display: inline-block; + width: 205px; + height: 44px; + background: url(/images/buildersClubPage_buyRobux_44px.png) no-repeat; +} + +.BuyRobuxBtn:hover { + background-position: 0 -44px; + cursor: pointer; +} + +.cardPanelLeft { + margin-left: 12px; + margin-top: 25px; + float: left; +} + +.cardPanelRight { + margin-right: 12px; + margin-top: 10px; + float: right; +} + +.centeredImage { + margin-bottom: 10px; +} + +#GameCardButtonContainer { + clear: both; + margin: 15px 0; +} + +.WhereToBuyTableCell, +WhereToBuyTableCellRight { + width: 320px; + padding: 10px 0; +} + +.WhereToBuyTableCellRight { + text-align: left; +} + +.AwardAssetDisplayList { + display: inline-block; + *display: inline; + *zoom: 1; + vertical-align: top; + width: 100px; + height: 100px; +} + +.PaymentTextBox { + padding: 5px; + width: 90%; +} + +.PaymentLabel { + width: 120px; + font-weight: bold; +} + +.PaymentPadding { + padding: 5px; +} + +.AutoRecurText { + color: Red; + display: none; +} + +#post-image-main, +#upload-video-main { + font-size: 16pt; + font-weight: bold; + text-align: center; +} + +#post-image-main a, +#post-image-main a:hover, +#upload-video-main a, +#upload-video-main a:hover { + text-decoration: none; +} + +#post-image-ul, +#upload-video-ul { + text-align: left; + font-weight: normal; + font-size: 12pt; +} + +#post-image-small, +#upload-video-small { + font-weight: normal; + font-size: 12pt; +} + +#post-image-footer, +#upload-video-footer { + text-align: right; +} + +#post-image-footer a, +#upload-video-footer a { + font-size: 12pt; + font-weight: bold; + text-decoration: none; +} + +#post-image-footer a:hover, +#upload-video-footer a:hover { + text-decoration: none; +} + +#UserContainer { + font-family: Verdana, Sans-Serif; +} + +#UserContainer #LeftBank { + float: left; + text-align: center; + width: 444px; +} + +#UserContainer #RightBank { + float: right; + text-align: center; + width: 444px; +} + +#UserContainer #LeftBank #UserPageLargeRectangleAd { + border: none; +} + +#UserPlacesPane { + clear: both; + background-color: #FFF; +} + +#UserPlacesPane { + clear: both; + background-color: #FFF; +} + +.FriendRequestsPane, +#UserModelsContainer, +#UserAssetsPane { + clear: both; + margin: 10px 0 0 0; + text-align: center; +} + +#UserBadgesPane, +#UserStatisticsPane { + margin: 10px 0 0 0; +} + +#UserStatisticsPane { + text-align: left; +} + +#FriendsPane, +#FavoritesPane { + clear: right; + margin: 10px 0 0 0; +} + +#UserAssetsPane { + margin-bottom: 10px; +} + +#UserBadgesPane #UserBadges { + background-color: #fff; + text-align: center; +} + +#ProfilePane h4 { + background-color: #ccc; + border-top: solid 1px #000; + color: #333; + font-family: Comic Sans MS, Verdana, Sans-Serif; + font-size: 1.3em; + margin: 0; + text-align: center; +} + +#ProfilePane p { + margin: .9em 0; + line-height: 1.6em; +} + +#UserAssetsPane #UserAssets h4, +#UserBadgesPane #UserBadges h4, +#UserPlacesPane #UserPlaces h4, +#UserStatisticsPane #UserStatistics h4, +#FavoritesPane #Favorites h4 { + background-color: #ccc; + border-bottom: solid 1px #000; + color: #333; + font-family: Comic Sans MS, Verdana, Sans-Serif; + margin: 0; + text-align: center; +} + +#UserPlacesPane #UserPlaces h4 { + background-color: #6e99c9; + color: #fff; + font-family: Verdana, Sans-Serif; + font-size: 1.4em; + font-weight: normal; + letter-spacing: .1em; + line-height: 1.5em; +} + +#UserStatisticsPane #UserStatistics { + background-color: #eee; + padding-bottom: 10px; +} + +#UserStatisticsPane #UserStatistics h4 { + margin-bottom: 5px; +} + +#UserStatisticsPane #UserStatistics .Statistic { + line-height: 1.8em; + margin: 0 auto; + width: 385px; +} + +#UserStatisticsPane #UserStatistics .Label { + float: left; + text-align: right; + width: 178px; +} + +#UserStatisticsPane #UserStatistics .Value { + float: right; + width: 177px; +} + +#UserModelsContainer { + text-align: left; +} + +#Friends { + margin-top: 10px; +} + +#Friends h4, +#FriendRequests h4 { + font-size: 10pt; + font-weight: bold; + line-height: 1em; + margin-bottom: 5px; + margin-top: 5px; +} + +.NoResults { + line-height: 1.3em; + padding: 10px; + text-align: center; +} + +.Badge { + margin: 10px 10px; + text-align: center; +} + +.Friend { + margin: 10px; +} + +.Friend .Avatar { + text-align: center; +} + +.Friend .Summary, +.Friend .Options { + margin-top: 5px; + text-align: center; +} + +#UserContainer .CollapsiblePanelHint { + color: #999; + padding: 5px; + text-align: center; +} + +#UserContainer #AssetsMenu { + float: left; + width: 158px; +} + +#UserContainer #AssetSearchOption { + float: left; +} + +#UserContainer #AssetUploadOption { + float: right; +} + +#UserContainer #AssetsList { + clear: both; +} + +#UserAssetsPane .AssetsMenuItem { + border: solid 1px #777; + margin: 15px; + padding: 3px 10px; + width: 100px; +} + +#UserAssetsPane .AssetsMenuItem:hover { + border: solid 1px #000; + cursor: pointer; + margin: 15px; + width: 100px; +} + +#UserAssetsPane .AssetsMenuItem_Selected { + background-color: #6e99c9; + border: solid 1px #000; + margin: 15px; + padding: 3px 10px; + width: 100px; +} + +#UserAssetsPane .AssetsMenuButton { + color: #777; + font: normal 14px/normal Verdana, sans-serif; +} + +#UserAssetsPane .AssetsMenuButton:hover { + color: #000; + text-decoration: none; +} + +#UserAssetsPane .AssetsMenuButton_Selected { + color: #fff; + font: normal 14px/normal Verdana, sans-serif; + text-decoration: none; +} + +#UserPlaces .PanelFooter, +#GroupPlaces .PanelFooter, +#Favorites .PanelFooter { + background-color: #fff; + color: #333; + font-family: Verdana, Sans-Serif; + margin: 0; + padding: 3px; + text-align: center; +} + +#UserPlaces .AccordionHeader { + background-color: #ccc; + border: solid 1px #000; + cursor: pointer; + font: bold 1em/normal Verdana, sans-serif; + letter-spacing: .1em; + margin: 1px 0; + padding: 1px 1em; + text-align: left; +} + +#UserPlaces .AccordionHeader:hover { + background-color: #6e99c9; + color: #fff; +} + +#UserPlaces .Place .PlayStatus { + margin: 5px 0 0 0; + display: inline; +} + +#UserPlaces .Place .PlayOptions { + margin: 5px 0 0 0; + display: inline; +} + +#UserPlaces .Place .PlayOptions .Button { + border-color: #333; + color: #333; + margin: 0 3px; +} + +#UserPlaces .Place .PlayOptions .Button:hover { + background-color: #6e99c9; + color: #fff; +} + +#UserPlaces .Place .Statistics { + border-top: dashed 1px #555; + border-left: dashed 1px #555; + border-right: dashed 1px #555; + color: #555; + font: normal 1em/normal Verdana, sans-serif; + letter-spacing: .1em; + line-height: 1.7em; + margin: 0; + margin-top: 10px; +} + +#UserPlaces .Place .Thumbnail { + border: solid 1px #555; + margin: 0; +} + +#UserPlaces .Place .Description { + border: dashed 1px #555; + color: #555; + font: normal 1em/normal Verdana, sans-serif; + max-height: 75px; + line-height: 1.7em; + margin: 5px 0 0 0; + padding: 5px 10px; + overflow: auto; + text-align: left; +} + +#UserPlaces .Place .Configuration { + border-bottom: dashed 1px #555; + border-left: dashed 1px #555; + border-right: dashed 1px #555; + font: normal 1em/normal Verdana, sans-serif; + line-height: 1.7em; + padding: 5px 10px; +} + +#UserContainer #AssetsContent { + float: left; + font-family: Verdana, Sans-Serif; + margin: 0 auto; + margin-left: 28px; + margin-right: 28px; + min-width: 0; + padding-bottom: 10px; + padding-left: 0; + padding-right: 0; + position: relative; + text-align: left; + width: 662px; +} + +#UserContainer #AssetsContent .HeaderPager, +#UserContainer #FavoritesContent .HeaderPager, +#UserContainer #AssetsContent .FooterPager, +#UserContainer #FavoritesContent .FooterPager { + clear: both; + margin: 0 12px 0 10px; + padding: 2px 0; + text-align: center; +} + +#UserContainer #AssetsContent .HeaderPager, +#UserContainer #FavoritesContent .HeaderPager { + margin-bottom: 10px; +} + +#UserContainer #AssetsContent .HeaderPager .Label, +#UserContainer #FavoritesContent .HeaderPager .Label, +#UserContainer #AssetsContent .FooterPager .Label, +#UserContainer #FavoritesContent .FooterPager .Label { + font-size: 1em; + vertical-align: middle; +} + +#UserContainer .Asset { + margin: 0 10px 15px 10px; + vertical-align: top; + width: 112px; +} + +#UserContainer .Asset .AssetThumbnail { + border: solid 1px #000; + height: 110px; + position: relative; + text-align: center; + width: 110px; +} + +#UserContainer .Asset .AssetDetails { + overflow: hidden; + padding: 2px 0 6px 0; + text-align: left; + width: 110px; +} + +#UserContainer .AssetName a { + font-size: .9em; + font-weight: bold; + line-height: 1.5em; + vertical-align: top; +} + +.AssetsBullet { + padding-right: 3px; +} + +#UserContainer .Label, +#UserContainer .Detail, +#UserContainer .DetailHighlighted, +#UserContainer .PriceInRobux, +#UserContainer .PriceInTickets { + font-size: .8em; +} + +#UserContainer .DetailHighlighted { + color: Red; + font-weight: bold; +} + +#UserContainer .PriceInRobux { + color: Green; + font-weight: bold; +} + +#UserContainer .PriceInTickets { + color: #fbb117; + font-weight: bold; +} + +.UserOnlineMessage { + font-family: Verdana; + font-size: 8pt; + color: Red; +} + +.UserOfflineMessage { + font-family: Verdana; + font-size: 8pt; + color: Gray; +} + +.AdPanel { + position: relative; + margin: 0 auto; +} + +.BanishButtonOverlay { + background-color: #eee; + border: solid 1px #444; + font-size: .8em; + padding: 1px 3px 2px 3px; + position: absolute; + text-align: center; + top: 0; + right: 0; +} + +.BanishButtonOverlay:hover { + background-color: #fff; + border: solid 1px #000; + text-decoration: none; +} + +.DeleteButtonOverlay { + background-color: #eee; + border: solid 1px #444; + font-size: .8em; + padding: 1px 3px 2px 3px; + position: absolute; + right: 2px; + text-align: center; + top: 2px; +} + +.DeleteFavoriteOverlay { + background-color: #eee; + border: solid 1px #444; + font-size: .8em; + padding: 1px 3px 2px 3px; + position: relative; + left: -57px; + text-align: center; + top: -97px; +} + +.DeleteButtonOverlay:hover { + background-color: #fff; + border: solid 1px #000; + text-decoration: none; +} + +.PlaceAccessIndicator { + color: #000; +} + +.SubscriptionStatusPanel { + width: 348px; + font-weight: bold; + margin-top: 5px; + padding: 5px 5px 5px 5px; + border: solid 1px black; + background-color: #ccc; +} + +.ProfileAlertPanel { + width: 348px; + padding: 5px 5px 5px 5px; + background-color: #FFF; + border: solid 1px black; + height: 64px; +} + +.UserBlurb { + overflow: hidden; + width: 348px; + padding: 5px 5px 5px 5px; + line-height: 20px; + background-color: #FFF; + border: solid 1px #000; +} + +#AccountSettingsForm { + font-size: 11px; + line-height: 18px; +} + +#AccountSettingsForm fieldset { + border: 1px solid #ddd; + padding: 5px 5px 5px 5px; +} + +.MyRobloxContainer { + font-family: Verdana, Sans-Serif; + margin: 0 auto; + width: 900px; +} + +.ThemeStandardColorBackground { + background: #6e99c9; +} + +.StandardBox, +.StandardBoxWhite, +.StandardBoxGray { + float: none; + border: 2px solid #6e99c9; + background-color: White; + padding: 10px 10px 10px 10px; + margin-bottom: 10px; + display: block; +} + +.StandardBoxWhite { + *zoom: 1; +} + +.StandardBoxGrey { + float: inherit; + border: 2px solid #6e99c9; + background-color: #A6A6A6; + padding: 10px 10px 10px 10px; + margin-bottom: 10px; + display: block; +} + +.StandardBoxHeader, +.StandardBoxHeaderGray, +.StandardTabWhite, +.StandardTabGray, +.StandardTabGrayActive { + float: none; + background-color: #6e99c9; + text-align: center; + color: White; + font-size: 16px; + font-weight: bold; + padding: 5px 12px 5px 12px; + display: block; + *display: inline; + *zoom: 1; + cursor: pointer; +} + +.StandardBoxHeaderGray { + background-color: #A6A6A6; +} + +.StandardTabWhite, +.StandardTabGrayActive, +.StandardTabGray { + display: inline-block; + height: 26px; + z-index: 2; + position: relative; + *display: inline; + *zoom: 1; +} + +.StandardTabWhite span { + *padding-right: 14px; +} + +.StandardTabGray { + background-color: #b4cde9; + margin-right: 4px; +} + +.StandardTabGrayActive { + margin-right: 4px; +} + +.StandardTabGray a, +.StandardTabGrayActive a { + color: White; +} + +.StandardTabGray:hover, +.StandardTabGrayActive { + background-color: #6c98cb; + color: White; +} + +.Column1a { + width: 290px; + float: left; + margin-top: 10px; +} + +.Column2a { + margin-top: 10px; + width: 600px; + float: right; +} + +.Column1a .StandardBox { + width: 266px; +} + +.Column1a .StandardBoxHeader, +.Column1a .StandardBoxHeaderGray { + width: 266px; +} + +.Column2a .StandardBox { + width: 576px; +} + +.Column2a .StandardBoxHeader, +.Column2a .StandardBoxHeaderGray { + width: 576px; +} + +.Column1b { + margin-top: 10px; + width: 190px; + float: left; + margin-right: 15px; +} + +.Column2b { + margin-top: 10px; + width: 490px; + float: left; +} + +.Column3b { + margin-top: 10px; + width: 190px; + float: right; +} + +.Column1b .StandardBox { + width: 166px; +} + +.Column1b .StandardBoxHeader, +.Column1b .StandardBoxHeaderGray { + width: 166px; +} + +.Column2b .StandardBox { + width: 466px; +} + +.Column2b .StandardBoxHeader, +.Column2b .StandardBoxHeaderGray { + width: 466px; +} + +.Column3b .StandardBox { + width: 166px; +} + +.Column3b .StandardBoxHeader, +.Column3b .StandardBoxHeaderGray { + width: 166px; +} + +.Column1c { + margin-top: 10px; + width: 590px; + float: left; +} + +.Column2c { + margin-top: 10px; + width: 290px; + float: right; +} + +.Column1c .StandardBox { + width: 556px; +} + +.Column1c .StandardBoxHeader, +.Column1c .StandardBoxHeaderGray { + width: 556px; +} + +.Column2c .StandardBox { + width: 266px; +} + +.Column2c .StandardBoxHeader, +.Column2c .StandardBoxHeaderGray { + width: 266px; +} + +.Column1d { + margin-top: 10px; + width: 440px; + float: left; +} + +.Column2d { + margin-top: 10px; + width: 440px; + float: right; +} + +.Column1d .StandardBox, +.Column1d .StandardBoxWhite { + width: 416px; +} + +.Column1d .StandardBoxHeader, +.Column1d .StandardBoxHeaderGray, +.Column1d .StandardTabWhite { + width: 416px; +} + +.Column2d .StandardBox, +.Column2d .StandardBoxWhite { + width: 416px; +} + +.Column2d .StandardBoxHeader, +.Column2d .StandardBoxHeaderGray, +.Column2d .StandardTabWhite { + width: 416px; +} + +.Column1e { + margin-top: 10px; + width: 150px; + float: left; +} + +.Column2e { + margin-top: 10px; + width: 740px; + margin-left: 10px; + float: left; +} + +.Column1e .StandardBox { + width: 136px; +} + +.Column1e .StandardBoxHeader, +.Column1e .StandardBoxHeaderGray { + width: 126px; +} + +.Column2e .StandardBoxGray { + width: 726px; + padding: 5px; +} + +.Column2e .StandardBoxHeader, +.Column2e .StandardBoxHeaderGray { + width: 356px; +} + +.Column1f { + margin-top: 10px; + width: 380px; + float: left; +} + +.Column2f { + margin-top: 10px; + width: 500px; + float: right; +} + +.Column1f .StandardBox { + width: 356px; +} + +.Column1f .StandardBoxHeader, +.Column1f .StandardBoxHeaderGray { + width: 356px; +} + +.Column2f .StandardBox { + width: 476px; +} + +.Column2f .StandardBoxHeader, +.Column2f .StandardBoxHeaderGray { + width: 476px; +} + +.Repeater { + border: 0; + width: 100%; +} + +.Repeater .AlternatingItemTemplateOdd { + background-color: #eee; + padding: 5px 5px 5px 5px; +} + +.Repeater .AlternatingItemTemplateEven { + background-color: #fff; + padding: 5px 5px 5px 5px; +} + +.Repeater .RepeaterImage { + float: left; + vertical-align: top; + margin: 5px 5px 5px 5px; +} + +.Repeater .RepeaterText { + float: left; + vertical-align: top; + margin: 5px 5px 5px 5px; +} + +.Repeater .RepeaterImageNoFloat { + text-align: left; + vertical-align: middle; + padding-left: 5px; +} + +.Repeater .RepeaterTextNoFloat { + text-align: left; + vertical-align: top; + padding: 5px; +} + +.Repeater thead { + font-size: 15px; + font-weight: normal; + color: #2163A5; + border-bottom: 1px solid #D3D3D3; +} + +.Column2b .Repeater .AlternatingItemTemplateOdd, +.Column2b .Repeater .AlternatingItemTemplateEven { + width: 466; + height: 50px; +} + +.GreySearchBar { + background-color: #7F7F7F; + border-color: #385D8A; + width: 150px; + color: White; + cursor: default; +} + +.GreySearchButton { + background-color: #7F7F7F; + border-color: #385D8A; + width: 50px; + color: White; +} + +.DescriptionText { + font-size: 14px; + padding: 10px; + background: #D2E3F7; +} + +.tab_white_31h_container .ajax__tab_header { + font-family: verdana, tahoma, helvetica; + font-size: 11px; + background: url(/images/tab-line.gif) repeat-x bottom; +} + +.tab_white_31h_container .ajax__tab_outer { + margin: 0; + background: url(/images/tab-right.gif) no-repeat right; + height: 21px; +} + +.tab_white_31h_container .ajax__tab_inner { + padding-left: 3px; + background: url(/images/tab-left.gif) no-repeat; +} + +.tab_white_31h_container .ajax__tab_tab { + height: 13px; + padding: 4px; + margin: 0; + background: url(/images/tab.gif) repeat-x; +} + +.tab_white_31h_container .ajax__tab_hover .ajax__tab_outer { + background: url(/images/tab-hover-right.gif) no-repeat right; +} + +.tab_white_31h_container .ajax__tab_hover .ajax__tab_inner { + background: url(/images/tab-hover-left.gif) no-repeat; +} + +.tab_white_31h_container .ajax__tab_hover .ajax__tab_tab { + background: url(/images/tab-hover.gif) repeat-x; +} + +.tab_white_31h_container .ajax__tab_active .ajax__tab_outer { + background: url(/images/tab-active-right.gif) no-repeat right; +} + +.tab_white_31h_container .ajax__tab_active .ajax__tab_inner { + background: url(/images/tab-active-left.gif) no-repeat; +} + +.tab_white_31h_container .ajax__tab_active .ajax__tab_tab { + background: url(/images/tab-active.gif) repeat-x; +} + +.tab_white_31h_container .ajax__tab_body { + font-family: verdana, tahoma, helvetica; + font-size: 10pt; + border: 1px solid #999; + border-top: 0; + padding: 8px; + background-color: #fff; +} + +.rbx2only { + display: none; +} + +.GreenButton { + height: 30px; + background: url(/images/btn_green_30h_t1.png) no-repeat; + display: inline-block; + font-family: Arial, Helvetica, Sans-Serif; + font-weight: bold; + font-size: 14px; + cursor: pointer; + *display: inline; + *zoom: 1; +} + +.GreenButton span { + height: 23px; + background: url(/images/btn_green_30h_t2.png) no-repeat top right; + margin: 0 0 0 4px; + display: block; + padding: 7px 12px 0 5px; + cursor: pointer; + color: White; +} + +.GreenButton span a { + color: White; + text-decoration: none; +} + +.GreenButton:hover { + background-position: 0 -30px; + cursor: pointer; + text-decoration: none; +} + +.GreenButton span:hover { + background-position: right -30px; + cursor: pointer; +} + +.RedButton { + height: 30px; + background: url(/images/btn_red_30h_t1.png) no-repeat; + display: inline-block; + font-family: Arial, Helvetica, Sans-Serif; + font-weight: bold; + font-size: 14px; + cursor: pointer; + *display: inline; + *zoom: 1; +} + +.RedButton span { + height: 23px; + background: url(/images/btn_red_30h_t2.png) no-repeat top right; + margin: 0 0 0 4px; + display: block; + padding: 7px 12px 0 5px; + cursor: pointer; + color: White; +} + +.RedButton span a { + color: White; + text-decoration: none; +} + +.RedButton:hover { + background-position: 0 -30px; + cursor: pointer; + text-decoration: none; +} + +.RedButton span:hover { + background-position: right -30px; + cursor: pointer; +} + +.Money { + color: #090; +} + +.SuccessBox { + border: solid 2px #a6dba6; + color: #090; + font-weight: bold; + padding: 5px; + margin: 20px 0; +} + +.ErrorBox, +.MessageBox { + border: solid 2px #ffa6a6; + color: #f00; + font-weight: bold; + padding: 5px; + margin: 20px 0; +} + +.MessageBox { + height: 65px; +} + +.GameCardMessageBox { + border: solid 2px #ffa6a6; + color: #f00; + font-weight: bold; + height: 56px; + padding: 5px; + *height: 66px; + margin: 20px 0; +} + +.GameCardSpecialOffer { + left: 73px; + position: relative; + top: -45px; +} + +.GameCardMessage { + color: #333; + left: 73px; + position: relative; + top: -44px; +} + +.BoxTextAligned { + margin-left: 10px; + position: relative; + top: -20px; +} + +#RedeemContainer { + font-family: Arial, Helvetica, Sans-Serif; + font-size: 14px; + color: Black; +} + +#RedeemContainer a { + color: #00f; +} + +#RedeemContainer a:hover { + text-decoration: none; +} + +#RedeemContainer #pin { + height: 21px; + font-size: 12px; +} + +.BigLinks { + font-size: 16px; + font-weight: bold; +} + +.SkinnyRightArrow { + cursor: pointer; + background: url(/images/arrow_skinny55h_right.png) no-repeat; + width: 12px; + height: 55px; + display: inline-block; + *display: inline; + *zoom: 1; +} + +.SkinnyRightArrow:hover { + background-position: 0 -55px; +} + +.SkinnyRightArrowDisabled { + background: url(/images/arrow_skinny55h_right.png) no-repeat 0 -110px; + width: 12px; + height: 55px; + display: inline-block; + *display: inline; + *zoom: 1; +} + +.SkinnyLeftArrow { + cursor: pointer; + background: url(/images/arrow_skinny55h_left.png) no-repeat; + width: 12px; + height: 55px; + display: inline-block; + *display: inline; + *zoom: 1; +} + +.SkinnyLeftArrow:hover { + background-position: 0 -55px; +} + +.SkinnyLeftArrowDisabled { + background: url(/images/arrow_skinny55h_left.png) no-repeat 0 -110px; + width: 12px; + height: 55px; + display: inline-block; + *display: inline; + *zoom: 1; +} + +.BlueLeftArrow { + cursor: pointer; + background: url(/images/arrow_36px_left.png) no-repeat; + width: 36px; + height: 36px; + display: inline-block; + *display: inline; + *zoom: 1; +} + +.BlueLeftArrow:hover { + background: url(/images/arrow36px_leftOn.png) no-repeat; +} + +.BlueRightArrow { + cursor: pointer; + background: url(/images/arrow_36px_right.png) no-repeat; + width: 36px; + height: 36px; + display: inline-block; + *display: inline; + *zoom: 1; +} + +.BlueRightArrow:hover { + background: url(/images/arrow36px_rightOn.png) no-repeat; +} + +.BCHat { + background: url(/images/Games/gamesPage_bcHelmet.png) no-repeat; + width: 35px; + height: 29px; + display: inline-block; + margin-top: 3px; + *display: inline; + *zoom: 1; +} + +.notificationBox { + display: inline-block; + background-color: #f00; + color: #fff; + height: 16px; + min-width: 18px; + width: auto; + font-size: 14px; + font-weight: bold; + margin: 2px 2px 4px 2px; + padding: 0 2px; + line-height: 1.1em; + text-align: center; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; +} + +.notificationBoxIE { + display: inline-block; + color: #fff; + background-image: url(/images/bg-notifications.png); + background-repeat: repeat-x; + background-position: left top; + min-width: 24px; + width: auto; + height: 16px; + text-align: center; + font-size: 14px; + font-weight: bold; + *display: inline; + *zoom: 1; +} + +#BuildersClubContainer { + margin-left: -5px; +} + +#CatalogContainer>.StandardBox { + padding: 3px 6px 8px 5px; +} + +.Assets .StandardBoxHeader { + width: 660px; +} + +.Assets .StandardBox { + width: 660px; +} + +.Contests { + margin-left: -5px; +} + +.DarkGradientBox { + background: none; + width: 150px; + color: Black; + position: relative; + border: none; +} + +.DarkGradientBox .DGB_Header { + font-size: 14px; + font-weight: bold; + text-align: center; + padding-top: 5px; + padding-bottom: 5px; + border-bottom: none; +} + +.DarkGradientBox .DGB_TextBox { + border: solid 1px #888; +} + +.DarkGradientBox .DGB_Label { + color: Black; + font-size: 10px; + font-weight: bold; + text-align: left; +} + +.DarkGradientBox .DGB_Button { + cursor: pointer; + background-color: #435D77; + color: White; + text-decoration: none; + border: solid 1px #777; + padding: 6px 10px 6px 10px; + font-family: Verdana, Sans-Serif; + font-size: 12px; + font-weight: bold; + text-align: center; + white-space: nowrap; +} + +.DarkGradientBox .DGB_Button:link, +.DarkGradientBox .DGB_Button:visited { + background-color: #435D77; + color: White; + text-decoration: none; +} + +.DarkGradientBox .DGB_Button:hover, +.DarkGradientBox .DGB_Button:active { + background-color: #B6CCE4; + color: #435D77; + text-decoration: none; +} + +#GamesContainer .DisplayFilters { + width: 126px; +} + +.WaitCursor, +.WaitCursor * { + cursor: wait!important; +} + +.PlayButton, +.BuildButton, +.PlayButtonSelected, +.BuildButtonSelected { + height: 54px; + width: 123px; + display: block; + cursor: pointer; +} + +.PlayButton { + background-image: url('/images/games/playBtn_off.png'); + background-repeat: no-repeat; +} + +.BuildButton { + background-image: url('/images/games/buildBtn_off.png'); + background-repeat: no-repeat; +} + +.PlayButton:hover, +.PlayButtonSelected { + background-image: url('/images/games/playBtn_on.png'); + background-repeat: no-repeat; +} + +.BuildButton:hover, +.BuildButtonSelected { + background-image: url('/images/games/buildBtn_on.png'); + background-repeat: no-repeat; +} + +#BCOnlyPlaces { + width: 416px; +} + +#BCOnlyPlaces .StandardBoxHeaderGray { + width: 399px; + height: 33px; + padding: 0 7px 0 16px; +} + +#BCOnlyPlaces .StandardBox { + padding: 5px; +} + +#GamesLeftColumn { + width: 126px; +} + +#InboxTabs { + position: relative; + top: 2px; +} + +#ItemContainer #Summary { + background-color: Transparent; + border: none; + font-family: Verdana, Geneva, sans-serif; + font-size: 11px; + color: Black; +} + +#ItemContainer #Summary .label { + color: #888; +} + +#ItemContainer #Summary .box .head { + color: Black; +} + +#ItemContainer #Summary .box .body { + border: 1px solid #CCC; + padding: 4px 8px 8px; + color: #000; +} + +#ItemContainer h3 { + font-family: Verdana, Geneva, sans-serif; + font-size: 11px; + color: #888; + letter-spacing: normal; +} + +.ReportAbuse { + text-align: right; +} + +.ReportAbuse .AbuseButton a { + color: #F99; + background: none; + padding-left: 16px; + padding-bottom: 2px; +} + +.ReportAbuse .AbuseButton a:hover { + background: url("/images/css/abuse.png") no-repeat scroll 0 2px transparent; + color: #F00; +} + +.ReportAbuse img { + display: none; +} + +.MultiplayerVisit:hover { + background-position: 0 54px; +} + +.MultiplayerVisit { + width: 212px; + height: 54px; + background: url(/images/css/btn_play_54h.png); +} + +.SoloVisit:hover { + color: #0C0; +} + +.SoloVisit { + background: none; + color: #080; + font-size: 14px; + position: relative; + top: -20px; + left: 28px; + width: auto; + height: auto; +} + +.SoloVisitText { + display: inline; +} + +#ItemContainer .PlayGames { + background-color: Transparent; + border: none; + padding: 0; + width: 100%; + margin: 4px 0 16px 0; +} + +.PlaceInfoIcons { + margin: 4px 0 0 1px; + text-align: right; +} + +.iPublic, +.iUnlocked { + background: url(/images/css/icon_public.png); + width: 20px; + height: 20px; +} + +.iLocked { + background: url(/images/css/icon_public.png); + width: 20px; + height: 20px; + background-position: -20px; +} + +.SharedIcon { + background: url(/images/css/icon_locked.png); + width: 20px; + height: 20px; + background-position: -20px; +} + +.CopyLockedIcon { + background: url(/images/css/icon_locked.png); + width: 20px; + height: 20px; +} + +.AllGearIcon { + background: url(/images/css/icon_gear.png); + width: 20px; + height: 20px; +} + +.GenreGearIcon { + background: url(/images/css/icon_gear.png); + background-position: 0 -20px; + width: 20px; + height: 20px; +} + +.NoGearIcon { + background: url(/images/css/icon_gear.png); + background-position: 0 -40px; + width: 20px; + height: 20px; +} + +#ItemContainer .ajax_tab_label { + color: #333; + font-size: 16px; + font-weight: bold; + font-family: Arial, Helvetica, sans-serif; + letter-spacing: normal; +} + +#ItemContainer #Thumbnail, +#ItemContainer #Thumbnail_Place { + border: none; +} + +#ItemContainer .CommentsContainer .Comments { + border: 0 none; +} + +#ItemContainer .CommentsContainer .Comment { + background: none; +} + +#ItemContainer .CommentsContainer .Avatar { + border: 0 none; +} + +#ItemContainer .CommentsContainer .Post .Audit { + color: #888; +} + +#BadgeStatsHeader { + width: auto; +} + +.sbMini { + margin-top: 5px; + font-family: Verdana, Sans-Serif; + font-size: 16px; + margin-right: 7px; +} + +.ProfileAlertPanel { + border: none; +} + +#UserPlaces .Place .Statistics, +#UserPlaces .Place .Configuration { + border: none; +} + +#GroupTitle { + width: 888px; +} + +.Column2b .StandardBoxGrey { + width: 454px; +} + +.subMenu { + background: url(/images/topNav_black.png); + width: 900px; + height: 30px; + border: none; + text-align: center; + margin-top: -5px; + margin-left: -5px; +} + +.subMenu ul { + margin: 0 0 0 27px; +} + +.subMenu>ul>li { + height: 30px; + margin: 0 2px; +} + +.subMenu ul ul { + left: -27px; +} + +.subMenu ul ul a, +.subMenu ul ul a:visited { + background: #444; + border: none; +} + +.subMenu ul ul a:hover { + background: #777; +} + +.subMenu>ul>li:hover { + background: url(/images/topNav_black.png); + background-position: 0 30px; +} + +.subMenu :hover>a, +.subMenu ul ul :hover>a { + text-decoration: none; +} + +.subMenu a:hover { + background: none; + text-decoration: none; +} + +.subMenu a, +.subMenu a:visited { + border: none; +} + +.subMenu .subMenuItemselected { + border: none; +} + +#CancelBuildersClubContainer h2, +#PaymentMethodsContainer h2, +#PaymentContainer h2, +#PayPalContainer h2, +#CashContainer h2, +#UpgradeCompleteContainer h2, +#ManageAccountUpgradesContainer h2, +#CancelAccountUpgradeContainer h2, +#AccountUpgradesConfirmationContainer h2 { + font-family: Arial, Helvetica, Sans-Serif; + color: #444; + font-size: 32px; + font-weight: bold; + letter-spacing: 0; +} + +#BuildersClubContainer #LeftColumn { + margin-left: 5px; +} + +#BuildersClubContainer #RightColumn { + margin-right: 5px; + font-family: Arial, Helvetica, Sans-Serif; + font-size: 14px; + color: #000; + width: 285px; +} + +#BuildersClubContainer #RightColumn .StandardBox { + width: 273px; +} + +#BuildersClubContainer #RightColumn .StrongRed { + font-family: Arial, Helvetica, Sans-Serif; + font-size: 14px; + font-weight: bold; + color: #f00; +} + +#BuildersClubContainer #RightColumn h3 { + font-weight: bold; + font-family: Arial, Helvetica, Sans-Serif; + font-size: 18px; + color: #333; +} + +#BuildersClubContainer #RightColumn .RefCode { + font-weight: bold; + font-family: Arial, Helvetica, Sans-Serif; + font-size: 30px; + color: #666; + display: block; + margin-bottom: 16px; +} + +#Header { + font-family: Arial, Helvetica, sans-serif; + position: absolute; + bottom: 0; +} + +#hlNews { + margin-right: 4px; +} + +.AlertSpace { + position: relative; + top: 0; + width: 147px; + height: 50px; + border: 1px solid #ccc; + margin: 0; + padding: 0; + margin-left: auto; + margin-right: auto; + font-family: Arial, Helvetica, sans-serif; + font-size: 14px; + font-weight: bold; +} + +#Header .AlertSpace { + float: right; + border: none; + margin-left: 0; + margin-right: 0; + background: url(/images/css/head_sign.png) 0 0; + height: 78px; +} + +.AlertSpace a { + position: absolute; + width: 43px; + padding-left: 18px; + background: url(/images/css/head_infobox_icons.png) no-repeat 0 0; +} + +.AlertSpace a:hover, +#Header .AlertSpace a:active { + text-decoration: none; +} + +.AlertSpace .MessageAlert { + border: none; + background: none; +} + +.AlertSpace .MessageAlert a { + left: 13px; + top: 8px; + color: #444; + background-position: -2px 0; +} + +.AlertSpace .MessageAlert a:hover { + color: #aaa; + background-position: -2px -20px; +} + +.AlertSpace .RobuxAlert { + border: none; + background: none; +} + +.AlertSpace .RobuxAlert a { + left: 13px; + top: 28px; + color: #080; + background-position: -2px -41px; +} + +.AlertSpace .RobuxAlert a:hover { + color: #0d0; + background-position: -2px -61px; +} + +.AlertSpace .FriendsAlert { + border: none; + background: none; +} + +.AlertSpace .FriendsAlert a { + left: 79px; + top: 8px; + color: #05b; + background-position: -2px -81px; +} + +.AlertSpace .FriendsAlert a:hover { + color: #0cf; + background-position: -2px -101px; +} + +.AlertSpace .TicketsAlert { + border: none; + background: none; +} + +.AlertSpace .TicketsAlert a { + left: 79px; + top: 28px; + color: #a61; + background-position: -2px -121px; +} + +.AlertSpace .TicketsAlert a:hover { + color: #fb6; + background-position: -2px -141px; +} + +div.icons, +a.icons { + display: none; +} + +div.message_icon { + display: none; +} + +div.friends_icon { + display: none; +} + +div.robux_icon { + display: none; +} + +div.tickets_icon { + display: none; +} + +#Header .Navigation { + width: 900px; + height: 30px; + background: url(/images/css/topNav_blue.png); + background-position: 0 0; + text-align: center; + line-height: 20px; +} + +.Navigation ul { + margin: 0 auto; + padding: 0; +} + +.Navigation li { + display: inline-block; + margin: 0; + padding: 6px 10px 0 10px; + height: 24px; + font-size: 16px; + font-weight: bold; +} + +.Navigation li:hover { + background: url(/images/css/topNav_blue.png); + background-position: 0 30px; +} + +.Navigation a { + display: inline-block; + color: #fff; +} + +.Navigation a:hover { + text-decoration: none; +} + +.Navigation ul li a, +.Navigation ul li a:visited { + border: none; + font-size: 16px; + padding: 0; +} + +.Navigation .dropdownmainnav { + border: none; + line-height: 2em; + background: #444; +} + +.Navigation .dropdownmainnav div { + background-color: #444; + cursor: pointer; +} + +.Navigation .dropdownmainnav div:hover { + background-color: #888; +} + +.StandardBox { + padding: 5px; + margin-bottom: 8px; + background: url(/images/css/standardBox_01_bkg.png) top repeat-x #fff; + border: 1px solid #aaa; + z-index: 0; +} + +.StandardBoxHeader, +.StandardBoxHeaderGray { + height: 33px; + padding: 0 7px 0 5px; + text-align: left; + z-index: 2; + background: url(/images/css/tab_black_33h_t1.png) no-repeat left top; + font-family: Arial, Helvetica, sans-serif; + font-size: 20px; + font-weight: bold; + color: #fff; + z-index: 0; +} + +.StandardBoxHeaderGray { + background: url(/images/css/tab_gray_33h_t1.png) no-repeat left top; +} + +.StandardBoxHeader span, +.StandardBoxHeaderGray span { + display: block; + width: 100%; + height: 29px; + padding: 5px 5px 0 2px; + background: url(/images/css/tab_black_33h_t2.png) no-repeat right top; + overflow: hidden; +} + +.StandardBoxHeaderGray span { + background: url(/images/css/tab_gray_33h_t2.png) no-repeat right top; +} + +.StandardTabWhite { + background: url(/images/css/tab_white_26h_t1.png) no-repeat left top; + padding: 0 4px; + float: none; + text-align: left; +} + +.StandardTabWhite span { + display: block; + width: 100%; + *width: 115%; + height: 26px; + padding: 5px 5px 0 9px; + background: url(/images/css/tab_white_26h_t2.png) no-repeat right top; + font-family: Arial, Helvetica, sans-serif; + font-size: 14px; + color: #000; + font-weight: normal; +} + +.StandardBoxWhite { + position: relative; + top: -1px; + background: #fff; + border: 1px solid #ccc; + padding: 8px; + color: Black; +} + +.StandardTabGray, +.StandardTabGrayActive { + position: relative; + background: url(/images/css/tab_white_31h_t1.png) no-repeat left top; + background-position: left 0; + height: 31px; + padding: 0; + text-align: left; + cursor: pointer; + margin: 0; +} + +.StandardTabGray span, +.StandardTabGrayActive span { + background: url(/images/css/tab_white_31h_t2.png) no-repeat right top; + background-position: right 0; + height: 25px; + padding: 6px 16px 0 8px; + margin: 0 0 0 4px; + color: #333; + font-family: Arial, Helvetica, sans-serif; + font-size: 16px; + font-weight: bold; + display: block; +} + +.StandardTabGray a, +.StandardTabGrayActive a { + color: #333; +} + +.StandardTabGrayActive { + background-position: left -62px; +} + +.StandardTabGrayActive span { + background-position: right -62px; +} + +.StandardTabGray:hover { + position: relative; + background: url(/images/css/tab_white_31h_t1.png) no-repeat left top; + background-position: left -31px; + height: 31px; + padding: 0; + z-index: 2; + text-align: left; + margin: 0; +} + +.StandardTabGray span:hover { + background: url(/images/css/tab_white_31h_t2.png) no-repeat right top; + background-position: right -31px; + height: 25px; + padding: 6px 16px 0 8px; + margin: 0 0 0 4px; + color: #333; + font-family: Arial, Helvetica, sans-serif; + font-size: 16px; + font-weight: bold; + display: block; +} + +.StandardBoxGray { + position: relative; + top: -2px; + padding: 8px 5px; + background: url(/images/css/standardBox_01_bkg.png) top repeat-x #fff; + border: 1px solid #aaa; +} + +.tab_white_31h_container .ajax__tab_header { + background: none; +} + +.tab_white_31h_container .ajax__tab_outer { + background: none; + height: auto; +} + +.tab_white_31h_container .ajax__tab_inner { + position: relative; + background: url(/images/css/tab_white_31h_t1.png) no-repeat left top; + height: 31px; + padding-left: 0; + z-index: 2; +} + +.tab_white_31h_container .ajax__tab_header .ajax__tab_tab { + background: url(/images/css/tab_white_31h_t2.png) no-repeat right top; + height: 25px; + padding: 6px 16px 0 8px; + margin: 0 0 0 4px; +} + +.tab_white_31h_container .ajax__tab_hover .ajax__tab_outer { + background: none; + height: auto; +} + +.tab_white_31h_container .ajax__tab_hover .ajax__tab_inner { + position: relative; + background: url(/images/css/tab_white_31h_t1.png) no-repeat left top; + background-position: left -31px; + height: 31px; + padding-left: 0; + z-index: 2; +} + +.tab_white_31h_container .ajax__tab_hover .ajax__tab_tab { + background: url(/images/css/tab_white_31h_t2.png) no-repeat right top; + background-position: right -31px; + height: 25px; + padding: 6px 16px 0 8px; + margin: 0 0 0 4px; +} + +.tab_white_31h_container .ajax__tab_active .ajax__tab_outer { + background: none; + height: auto; +} + +.tab_white_31h_container .ajax__tab_active .ajax__tab_inner { + position: relative; + background: url(/images/css/tab_white_31h_t1.png) no-repeat left top; + background-position: left -62px; + height: 31px; + padding-left: 0; + z-index: 2; +} + +.tab_white_31h_container .ajax__tab_active .ajax__tab_tab { + background: url(/images/css/tab_white_31h_t2.png) no-repeat right top; + background-position: right -62px; + height: 25px; + padding: 6px 16px 0 8px; + margin: 0 0 0 4px; +} + +.tab_white_31h_container .ajax__tab_body { + position: relative; + top: -2px; + padding: 8px 5px; + background: url(/images/css/standardBox_01_bkg.png) top repeat-x #fff; + border: 1px solid #aaa; +} + +.Column2a { + float: left; +} + +.Column3b { + float: left; +} + +.Column2c { + float: left; + margin-left: 10px; +} + +.Column2d { + float: left; +} + +.Column1e { + width: 140px; +} + +.Column2e .StandardBoxHeaderGray { + margin: 0; + width: 726px; +} + +.Column2e .StandardBoxGray { + width: 726px; +} + +.Column2f { + float: left; +} + +div.rbx2only { + display: block; +} + +.rbx2only { + display: inline; +} + +.rbx2hide { + display: none; +} + +#RobloxCentralBank { + overflow: hidden; +} + +.transparentBkg { + background-color: Transparent; +} + +.FriendRequestsPane { + width: 890px; +} + +.Shadow { + display: none; +} + +.ShadowedStandardBox .Header { + height: 33px; + padding: 0 7px 0 5px; + text-align: left; + z-index: 2; + background: url(/images/css/tab_black_33h_t1.png) no-repeat left top; + font-family: Arial, Helvetica, sans-serif; + font-size: 20px; + font-weight: bold; + color: #fff; +} + +.ShadowedStandardBox .Header span { + display: block; + width: 100%; + height: 29px; + background: url(/images/css/tab_black_33h_t2.png) no-repeat right top; + overflow: hidden; + height: 26px; + padding: 7px 4px 0 3px; +} + +.ShadowedStandardBox .Content { + padding: 5px; + margin-bottom: 8px; + background: url(/images/css/standardBox_01_bkg.png) top repeat-x #fff; + border: 1px solid #aaa; +} + +a.rss_icon { + background: url(/images/css/topNav_rss.png) no-repeat; +} + +.Column1d .StandardTabWhite, +.Column2d .StandardTabWhite { + width: auto; +} + +.MyRobloxContainer { + width: 890px; +} + +.BCHat { + margin-top: 1px; +} + +#partycontainer +{ + bottom: 110px; + right: 10px; +} + +.partyWindow { + color: #666; + font-family: Verdana, Geneva, sans-serif; + font-size: 11px; + width: 250px; +} + +.partyWindow .title +{ + background: transparent url('/images/friendsbar/tab_blue19h_l.gif') no-repeat left top; + display: block; + text-decoration: none; + padding-left: 2px; + height: 19px; + width:248px; + cursor: pointer; +} +.partyWindow .title span +{ + background: transparent url('/images/friendsbar/tab_blue19h_r.gif') no-repeat right top; + display: block; + height: 15px; + padding: 2px 15px 2px 7px; + text-decoration: none; + color:#fff; +} + +.partyWindow .title_flash +{ + background: transparent url('/images/friendsbar/tab_white19h_l2.gif') no-repeat left top; +} +.partyWindow .title_flash span +{ + background: transparent url('/images/friendsbar/tab_white19h_r2.gif') no-repeat right top; + color:#444; +} + +.partyWindow .title strong { + display:block; + padding:2px 15px 4px 6px; + background:url("/images/chat/tab_blue21h_r.png") no-repeat right top; + color: #fff; + width: 227px; + font-weight: bold; +} + +.partyWindow .closeparty { + width:10px; + height:9px; + /*float:right;*/ + margin: 5px 9px 0 0; + cursor:pointer; + position:absolute; + right:0; + top:0; + color: #fff; + font-weight: bold; + font-size:14px; +} + +.partyWindow .main { + clear: both; + width: 248px; + height: auto; + margin: 0; + /*padding: 10px;*/ + background: #f2f2f2; + border: 1px solid #a6a6a6; + border-top: 0px none; + overflow:auto; +} + +.partyWindow .kickuser +{ + float: right; + padding-right: 5px; + color: Red; + cursor: pointer; +} +#new_party p { + text-align:center; + padding: 40px 0 0 0; +} + +#party_none .main .btn_green21h { + margin: 15px 0 0 77px; +} + +.clear { + clear:both; +} + +.main #new_party_clear { + padding: 40px 0 0 0; +} + + + +/* Buttons using sliding doors */ + +.btn_green21h { + float:left; + background:url("/images/chat/btn_green21h_l.png") no-repeat left top; + padding:0 0 0 2px; +} +.btn_green21h a { + display:block; + padding:2px 14px 4px 10px; + background:url("/images/chat/btn_green21h_r.png") no-repeat right top; + color: White; + font-family: verdana; + font-weight: bold; + text-decoration: none; +} +.btn_green21h:hover { + background:url("/images/chat/btn_green21h_over_l.png") no-repeat left top; +} +.btn_green21h:hover a { + background:url("/images/chat/btn_green21h_over_r.png") no-repeat right top; +} +.btn_red21h { + float:left; + background:url("/images/chat/btn_red21h_l.png") no-repeat left top; + padding:0 0 0 2px; +} +.btn_red21h a { + display:block; + padding:2px 14px 4px 10px; + background:url("/images/chat/btn_red21h_r.png") no-repeat right top; + color: White; + font-family: verdana; + font-weight: bold; + text-decoration: none; +} +.btn_red21h:hover { + background:url("/images/chat/btn_red21h_over_l.png") no-repeat left top; +} +.btn_red21h:hover a { + background:url("/images/chat/btn_red21h_over_r.png") no-repeat right top; +} + +.btn_black21h { + float:left; + background:url("/images/chat/btn_black21h_l.png") no-repeat left top; + padding:0 0 0 2px; + color: White; +} +.btn_black21h a { + display:block; + padding:2px 14px 4px 10px; + background:url("/images/chat/btn_black21h_r.png") no-repeat right top; + color: #FFF; + font-family: verdana; + font-weight: bold; + text-decoration: none; +} +.btn_black21h:hover { + background:url("/images/chat/btn_black21h_over_l.png") no-repeat left top; +} +.btn_black21h:hover a { + background:url("/images/chat/btn_black21h_over_r.png") no-repeat right top; +} + +/* Party Invite CSS */ + +.main h1 { + padding: 15px 20px 15px 20px; + font-size: 130%; + text-align:center; +} + + +.main #invite_status { + padding: 10px 0 10px 0; +} + +.main p { + padding: 0 0 7px 0; +} + +.main .btn_green21h { + float:left; + margin: 0 0 0 35px; +} +.main .btn_black21h { + float:right; + margin: 0 35px 0 0; +} + +.main #invite_clear { + padding: 15px 0 0 0; +} + +/* Party Leader css */ + +dd { +} +dt { + float: left; +} +dd { + margin-left: 30px; +} + +.grey9{ + color:gray; + font-size:9px; +} +.status{ + color:gray; + font-size:11px; +} +.name_me { + font-weight:bold; + color:#0066cc; +} +.name_other { + font-weight:bold; + color:#007b00; +} +.name_status { + font-weight:bold; +} + +.partyWindow { + color:black; + font-size:11px; + height:auto; +} + +.members dl { + padding: 0 0 0 5px; +} +.members dt { + padding: 4px 0 0 0; +} +.members dd { + padding: 4px 0 1px 0; +} + +.main p { + padding: 10px 0 5px 0px; + text-align:center; +} + +#chat_messages { + padding: 0px 3px 3px 3px; + margin: 5px 5px 0 5px; + height:217px; + overflow:auto; + background-color:white; + border-style: solid; + border-width:1px; + border-color:#aaa; +} +#chat_messages li { + padding: 6px 0 0 0; + list-style-type: none; +} + +#party_game_thumb +{ + width: 75px; + margin-right: 5px; + float: left; +} +#party_current_game +{ + margin: 5px; +} +#party_game_name +{ + width: 140px; + float: left; +} +#party_game_follow_me +{ + margin-top: 5px; +} + +#chat_input { + margin: 5px 5px 0 5px; + padding-right:2px; +} + +#chat_input input { + border: 1px solid #ccc; + width:236px; + height: 40px; +} + +#chat_input textarea { + border: 1px solid #aaa; + overflow: auto; + width:100%; + height:50px; +} + +.main #leader_clear { + padding: 15px 0 0 0; +} + +#party_my .main .btn_black21h { + /*margin: 20px 0 0 73px;*/ + margin: 15px 70px 0 0; + /*position:absolute; + left:83px; + top:402px; + */ +} + +// Roblox Forum +a.linkSmallBold, a.linkMenuSink +{ + font-weight: bold; + color: #0000FF; +} + +a.linkSmall, a.LinkSmallBold, a.linkMenuSink +{ + color: navy; + font-size: 0.9em; +} + + +a.linkSmallBold:visited, a.linkMenuSink:visited +{ + font-weight: normal; + color: #013DA4; +} + +a.linkSmallBold:Hover, a.linkMenuSink:Hover +{ + color: #DD6900; +} + + +/***************************************************** +Text and Anchor to display when a user is online +*****************************************************/ +.userOnlineLinkBold, a.userOnlineLinkBold, a.userOnlineLinkBold:Visited, a.userOnlineLinkBold:Hover, a.userOnlineLinkBold:Link +{ + font-weight: bold; + color: #0055E7; +} + +.moderatorOnlineLinkBold, a.moderatorOnlineLinkBold, a.moderatorOnlineLinkBold:Visited, a.moderatorOnlineLinkBold:Hover, a.moderatorOnlineLinkBold:Link +{ + font-weight: bold; + color: #00008B; +} + +.adminOnlineLinkBold, a.adminOnlineLinkBold, a.adminOnlineLinkBold:Visited, a.adminOnlineLinkBold:Hover, a.adminOnlineLinkBold:Link +{ + font-weight: bold; + color: black; +} + +/***************************************************** +Text and anchors used in the navigation menu +*****************************************************/ +.menuTitle +{ + font-weight: bold; + font-size: 20px; + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; + color: navy; +} + +.menuText +{ + font-size: 0.9em; + font-weight: bold; + color: #FFFFFF; +} + +a.menuTextLink:visited, a.menuTextLink:link +{ + font-size: 0.9em; + text-decoration: none; + color: #013DA4; +} + +a.menuTextLink:Hover +{ + color: #000000; +} + + +/***************************************************** +Text and anchors used in the search +*****************************************************/ +.searchPager +{ + font-size : 0.9em; + font-weight: bold; +} + +.searchItem +{ + background-color: #DDEEFF; +} + +.searchAlternatingItem +{ + background-color: #FFFFFF; +} + + +/***************************************************** +Default separator style for PostList +*****************************************************/ +td.flatViewSpacing +{ + height: 2px; + background-color: #80B7FF; +} + +/***************************************************** +Table Header and cell definitions +*****************************************************/ +th +{ + /* background-image: url(ForumC/skins/default/images/forumHeaderBackground.gif); */ + background-color: #6e99c9; +} + +td.forumHeaderBackgroundAlternate +{ + /* background-image: url(ForumC/skins/default/images/forumHeaderBackgroundAlternate.gif); */ + background-color: #BDD6F5; +} + +/***************************************************** +Body +*****************************************************/ +body +{ + FONT-SIZE: 8pt; + COLOR: #000000; + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; + scrollbar-face-color: #DEE3E7; + scrollbar-highlight-color: #FFFFFF; + scrollbar-shadow-color: #DEE3E7; + scrollbar-3dlight-color: #D1D7DC; + scrollbar-arrow-color: #006699; + scrollbar-track-color: #EFEFEF; + scrollbar-darkshadow-color: #98AAB1; +} + + +/***************************************************** +Validation Text +*****************************************************/ +.validationWarningSmall +{ + color: Red; + font-size : 0.9em; +} + +/***************************************************** +General Text +*****************************************************/ +.normalTextSmall +{ + font-size : 1.0em; +} + +.CenterColumn a +{ + color : #0000FF; +} +.CenterColumn a:visited +{ + color : #013DA4; +} + + +.normalTextSmallBold +{ + font-size : 1.0em; + font-weight: bold; +} + +.normalTextSmaller +{ + font-size: 0.9em; +} + +.normalTextSmall, .normalTextSmallBold, .normalTextSmaller +{ + color : #000000; + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; +} + +.normalTextSmall a, .normalTextSmallBold a, .normalTextSmaller a +{ + color : #0000FF; + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; +} +.normalTextSmall a:visited, .normalTextSmallBold a:visited, .normalTextSmaller a:visited +{ + color : #013DA4; + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; +} + +/***************************************************** +Text used on tables with a background +*****************************************************/ +.tableHeaderText +{ + color: white; + font-size: 11px; + padding: 5px; + font-weight:bold; + text-align: center; + font-family: Verdana, Helvetica, Arial, Sans-Serif; +} + +/***************************************************** +Border used around tables +*****************************************************/ +.tableBorder +{ + border: 1px #013DA4 solid; + background-color: #FFFFFF; +} + +/***************************************************** +Main forum colors +*****************************************************/ +td.forumRow +{ + background-color: #DDEEFF; +} + + +td.forumAlternate +{ + background-color: #DAE7FD; +} + +/***************************************************** +Background color and text used in threaded view +*****************************************************/ +td.threadTitle +{ + background-color: #D4D9EC; +} + +.threadDetailTextSmall +{ + color: #0055E7; + font-size: 0.9em; +} + +.threadDetailTextSmallBold +{ + color: #0055E7; + font-size: 0.9em; + font-weight: bold; +} + +td.forumRowHighlight +{ + background-color: #dfe9fc; +} + +/***************************************************** +Text and links used in ForumGroupRepeater and ForumRepeater +*****************************************************/ +.forumTitle +{ + font-size: 1.0em; + font-weight: bold; + color: #013DA4; +} + + +a.forumTitle:visited, a.forumTitle:link +{ + font-size: 1.0em; + font-weight: bold; + color: #013DA4; +} + +a.forumTitle:hover +{ + color: #DD6900; +} + +.forumName +{ + font-weight: bold; + font-size: 16px; + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; + text-decoration: none; + color: navy; +} + +a.forumName:hover +{ + color: #DD6900; + text-decoration: underline; +} + + +/***************************************************** +Form Elements +*****************************************************/ +select +{ + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; + font-weight: bold; + background-color: #DAE7FD; + border-color: Black; +} + +textarea +{ + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; + font-size: 0.9em; + background-color: White; + border-color: Black; +} + +/***************************************************** +Menu Controls +*****************************************************/ +A.linkMenuSink +{ + font-size: 0.9em; + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; + position: relative; +} + +TD.popupMenuSink +{ + position: relative; +} + +DIV.popupMenu +{ + border: 1px solid blue; +} + +DIV.popupTitle +{ + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; + color: white; + font-weight: bold; + background-color: #4455AA; +} + +DIV.popupItem +{ + font-size: 1.0em; + font-weight: bold; + FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; + background-color: #DDEEFF; +} \ No newline at end of file diff --git a/resources/views/admin/ban.blade.php b/resources/views/admin/ban.blade.php new file mode 100644 index 0000000..66bab49 --- /dev/null +++ b/resources/views/admin/ban.blade.php @@ -0,0 +1,54 @@ +@inject('user', 'App\Http\Controllers\UsersController') + +@extends('layouts.app') + +@section('title') +Ban +@endsection + +@section('content') +
+

Ban user

+

Ban a user from Tadah, temporarily or forever.

+
+ @if (session()->has('error')) +
+ {{ session()->get('error') }} +
+ @endif + @if (session()->has('success')) +
+ {{ session()->get('success') }} +
+ @endif +
+ @csrf + +
+ + +
+
+ + +
+
+ +
+ +
+
+ +
+
+
+
+ +
+
+ +@endsection \ No newline at end of file diff --git a/resources/views/admin/createinvitekey.blade.php b/resources/views/admin/createinvitekey.blade.php new file mode 100644 index 0000000..0364b60 --- /dev/null +++ b/resources/views/admin/createinvitekey.blade.php @@ -0,0 +1,32 @@ +@extends('layouts.app') + +@section('title') +Create Invite Key +@endsection + +@section('content') +
+

Generate Invite Key

+

Used for inviting new users to Tadah. Inviting random or unknown people is not permitted.
Minimum uses: 1
Maximum uses: 50

+
+ @if (session()->has('error')) +
+ {{ session()->get('error') }} +
+ @endif + @if (session()->has('success')) +
+ {{ session()->get('success') }} +
+ @endif +
+ @csrf + +
+ + +
+ +
+
+@endsection \ No newline at end of file diff --git a/resources/views/admin/index.blade.php b/resources/views/admin/index.blade.php new file mode 100644 index 0000000..48da736 --- /dev/null +++ b/resources/views/admin/index.blade.php @@ -0,0 +1,29 @@ +@inject('user', 'App\Http\Controllers\UsersController') + +@extends('layouts.app') + +@section('title') +Admin +@endsection + +@section('content') +
+ @if (session()->has('message')) +
+ {{ session()->get('message') }} +
+ @endif +

Admin Panel

+

They will repent.

+
+ +
+@endsection \ No newline at end of file diff --git a/resources/views/admin/invitekeys.blade.php b/resources/views/admin/invitekeys.blade.php new file mode 100644 index 0000000..898470c --- /dev/null +++ b/resources/views/admin/invitekeys.blade.php @@ -0,0 +1,60 @@ +@inject('user', 'App\Http\Controllers\UsersController') + +@extends('layouts.app') + +@section('title') +Invite Keys +@endsection + +@section('content') +
+ @if (session()->has('message')) +
+ {{ session()->get('message') }} +
+ @endif +

Invite Keys

+

All invite keys, depleted or not. Disabling a key turns its uses to zero, it doesn't delete it for archival purposes.

+ @if ($invitekeys->count() > 0) + + + + + + + + + + + + + + @foreach ($invitekeys as $invitekey) + + + + + + + + + + @endforeach + +
IDCreatorKeyUses RemainingCreatedUpdatedDisable
{{ $invitekey->id }}{{ $invitekey->user->username }}{{ $invitekey->token }}{{ $invitekey->uses }}{{ date('m/d/Y ', strtotime($invitekey->created_at)) }}{{ date('m/d/Y ', strtotime($invitekey->updated_at)) }} +
+ @csrf + + +
+
+
+ {{ $invitekeys->links('pagination::bootstrap-4') }} +
+ @else +
+

No invite keys

+

Well, you obviously can't invite anyone without any invite keys, so go make some.

+ @endif +
+@endsection \ No newline at end of file diff --git a/resources/views/admin/newxmlitem.blade.php b/resources/views/admin/newxmlitem.blade.php new file mode 100644 index 0000000..7687723 --- /dev/null +++ b/resources/views/admin/newxmlitem.blade.php @@ -0,0 +1,101 @@ +@inject('user', 'App\Http\Controllers\UsersController') + +@extends('layouts.app') + +@section('title') +New XML Asset +@endsection + +@section('content') +
+

New XML Asset

+

Create a new XML asset on Tadah.

+
+ @if (session()->has('error')) +
+ {{ session()->get('error') }} +
+ @endif + @if (session()->has('success')) +
+ {{ session()->get('success') }} +
+ @endif +
+ @csrf + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+
+@endsection + +@section('scripts') + +@endsection \ No newline at end of file diff --git a/resources/views/admin/unban.blade.php b/resources/views/admin/unban.blade.php new file mode 100644 index 0000000..6c38d4b --- /dev/null +++ b/resources/views/admin/unban.blade.php @@ -0,0 +1,34 @@ +@inject('user', 'App\Http\Controllers\UsersController') + +@extends('layouts.app') + +@section('title') +Ban +@endsection + +@section('content') +
+

Unban user

+

Unban a user from Tadah. Usually used during moderation errors.

+
+ @if (session()->has('error')) +
+ {{ session()->get('error') }} +
+ @endif + @if (session()->has('success')) +
+ {{ session()->get('success') }} +
+ @endif +
+ @csrf + +
+ + +
+ +
+
+@endsection \ No newline at end of file diff --git a/resources/views/auth/login-old.blade.php b/resources/views/auth/login-old.blade.php new file mode 100644 index 0000000..173cca6 --- /dev/null +++ b/resources/views/auth/login-old.blade.php @@ -0,0 +1,73 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Login') }}
+ +
+
+ @csrf + +
+ + +
+ + + @error('email') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ + + @error('password') + + {{ $message }} + + @enderror +
+
+ +
+
+
+ + + +
+
+
+ +
+
+ + + @if (Route::has('password.request')) + + {{ __('Forgot Your Password?') }} + + @endif +
+
+
+
+
+
+
+
+@endsection diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php new file mode 100644 index 0000000..d5cf582 --- /dev/null +++ b/resources/views/auth/login.blade.php @@ -0,0 +1,94 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+ Login +
+
+
+ + +
+
+
+
+
+
+ Create a Free {{ config('app.name') }} Account +
+
+

+ Creating an account on {{ config('app.name') }} allows you to customize your character, make friends, + build places, earn money, and more! +

+

+

+ Register +
+

+
+
+
+
+
+
+
+ @csrf + + +
+@endsection \ No newline at end of file diff --git a/resources/views/auth/passwords/confirm.blade.php b/resources/views/auth/passwords/confirm.blade.php new file mode 100644 index 0000000..ca78fc1 --- /dev/null +++ b/resources/views/auth/passwords/confirm.blade.php @@ -0,0 +1,49 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Confirm Password') }}
+ +
+ {{ __('Please confirm your password before continuing.') }} + +
+ @csrf + +
+ + +
+ + + @error('password') + + {{ $message }} + + @enderror +
+
+ +
+
+ + + @if (Route::has('password.request')) + + {{ __('Forgot Your Password?') }} + + @endif +
+
+
+
+
+
+
+
+@endsection diff --git a/resources/views/auth/passwords/email.blade.php b/resources/views/auth/passwords/email.blade.php new file mode 100644 index 0000000..1fea984 --- /dev/null +++ b/resources/views/auth/passwords/email.blade.php @@ -0,0 +1,47 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Reset Password') }}
+ +
+ @if (session('status')) + + @endif + +
+ @csrf + +
+ + +
+ + + @error('email') + + {{ $message }} + + @enderror +
+
+ +
+
+ +
+
+
+
+
+
+
+
+@endsection diff --git a/resources/views/auth/passwords/reset.blade.php b/resources/views/auth/passwords/reset.blade.php new file mode 100644 index 0000000..989931d --- /dev/null +++ b/resources/views/auth/passwords/reset.blade.php @@ -0,0 +1,65 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Reset Password') }}
+ +
+
+ @csrf + + + +
+ + +
+ + + @error('email') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ + + @error('password') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+
+@endsection diff --git a/resources/views/auth/register-old.blade.php b/resources/views/auth/register-old.blade.php new file mode 100644 index 0000000..2e3a221 --- /dev/null +++ b/resources/views/auth/register-old.blade.php @@ -0,0 +1,99 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Register') }}
+ +
+ @if (config('app.registration_enabled')) +
+ @csrf + +
+ + +
+ + + @error('username') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ + + @error('email') + + {{ $message }} + + @enderror +
+
+ + @if (config('app.invite_keys_required')) +
+ + +
+ +
You have to be invited.
+ + @error('invite_key') + + {{ $message }} + + @enderror +
+
+ @endif + +
+ + +
+ + + @error('password') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ +
+
+ +
+
+ +
+
+
+ @else +

Registration closed

+

Sorry, we're not taking new users at the moment. Check back in a bit.

+ @endif +
+
+
+
+
+@endsection diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php new file mode 100644 index 0000000..cd40c3e --- /dev/null +++ b/resources/views/auth/register.blade.php @@ -0,0 +1,89 @@ +@extends('layouts.app') + +@section('content') +
+
+

Sign Up and Play

+

Step 1 of 2: Create Account

+
+
+ Provide your age-group +
+ This will help us to customize your experience. Users under 13 years will only be shown pre-approved images. +
+
+
+
+
+
+
+
+ Choose a name for your ROBLOX character +
+ Use 3-20 alphanumeric characters: A-Z, a-z, 0-9, no spaces +
+
+
+
+
+
+
+
+
+   +
+
+
+
+
+ Choose your ROBLOX password +
+ 4-10 characters, no spaces +
+
+
+
+
+
+
+
+   +
+
+   +
+
+
+
+
+ Choose your chat mode +
+ All in-game chat is subject to profanity filtering and moderation. For enhanced chat safety, choose SuperSafe Chat; only chat from pre-approved menus will be shown to you. +
+
+
+
+
+
+
+
+ Provide your parent's email address +
+ This will allow you to recover a lost password +
+
+
+
+
+
+
+   +
+
+
+
+ +
+
+
+@endsection \ No newline at end of file diff --git a/resources/views/auth/verify.blade.php b/resources/views/auth/verify.blade.php new file mode 100644 index 0000000..9f8c1bc --- /dev/null +++ b/resources/views/auth/verify.blade.php @@ -0,0 +1,28 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Verify Your Email Address') }}
+ +
+ @if (session('resent')) + + @endif + + {{ __('Before proceeding, please check your email for a verification link.') }} + {{ __('If you did not receive the email') }}, +
+ @csrf + . +
+
+
+
+
+
+@endsection diff --git a/resources/views/catalog/configure.blade.php b/resources/views/catalog/configure.blade.php new file mode 100644 index 0000000..57c3817 --- /dev/null +++ b/resources/views/catalog/configure.blade.php @@ -0,0 +1,123 @@ +@extends('layouts.app') + +@section('title') +Configure Item +@endsection + +@section('content') +
+
+
+
+
{{ __('Configure Item') }}
+ +
+
+ @csrf + + @if (session()->has('error')) +
+ {{ session()->get('error') }} +
+ @endif + +
+ + +
+ + + @error('name') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ {{ $item->name }} +
+
+ +
+ + +
+ + + @error('description') + + {{ $message }} + + @enderror +
+
+ + @if ($item->isXmlAsset()) +
+ + +
+ + + @error('thumbnailurl') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ + + @error('xml') + + {{ $message }} + + @enderror +
+
+ @endif + +
+ + +
+ +
+
+ +
+
+
+ onsale ? 'checked' : '' }}> + + +
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+@endsection diff --git a/resources/views/catalog/index-old.blade.php b/resources/views/catalog/index-old.blade.php new file mode 100644 index 0000000..56bfd74 --- /dev/null +++ b/resources/views/catalog/index-old.blade.php @@ -0,0 +1,74 @@ +@extends('layouts.app') + +@section('title') +Catalog +@endsection + +@section('meta') + + + + + + +@endsection + +@section('content') +
+
+
+
+ + +
+
+
+ + + @if ($items->count() > 0) +
+ @foreach ($items->all() as $item) + + @endforeach +
+ @else +
+

Nothing found

+

Looks like there are no items to display for this query.

+
+ @endif +
+ {{ $items->links('pagination::bootstrap-4') }} +
+
+@endsection diff --git a/resources/views/catalog/index.blade.php b/resources/views/catalog/index.blade.php new file mode 100644 index 0000000..9a00007 --- /dev/null +++ b/resources/views/catalog/index.blade.php @@ -0,0 +1,245 @@ +@extends('layouts.app') + +@section('content') +
+
+ + + + + +
+ Catalog + + + + + +
+
+ +
+ +
+ +
+
+ +
+

Category

+ +
+
+
+
+ LEGEND
+
+
+ Builders Club Only items are those which can only be purchased by users with a Builders Club membership.
+
+
+ Limited Items are those which were once sold by Roblox and will not be sold again. Users who own these items can re-sell them to other users for the price of their choice.
+
+
+ Limited Unique Items are sold by Roblox until they run out (we could release, say, 100 of a certain hat.) When you buy these, they are stamped with a serial number (i.e. 7 / 100) that shows which one you got.
+
+ Once these items run out, they can also be sold to other users. +
+
+ + +
+ +
+ {{ $type }} For Sale +
+
+ + @foreach (array_chunk($items->items(), 5) as $rowitems) + + @foreach ($rowitems as $item) + + @endforeach + + @endforeach + + + +
+
+
+ {{ $item->name }} +
+
+ +
+ Updated: + {{ $item->updated_at->diffForHumans() }} +
+ +
+ Number Sold: + {{ number_format($item->sales) }} +
+ +
+ D$: {{ number_format($item->price) }} +
+
+
+
+
+ Avatar Items - {{ config('app.name') }} has a full virtual goods catalog with avatar items and other virtual items. Create a free account on {{ config('app.name') }} and start collecting +

virtual avatar items

+ , virtual goods, virtual items, and other gear for your virtual avatars. +
+
+
+
+ {{ $items->links('pagination.simple') }} +
+
+ +
+
+@endsection diff --git a/resources/views/catalog/item-old.blade.php b/resources/views/catalog/item-old.blade.php new file mode 100644 index 0000000..f62e6ae --- /dev/null +++ b/resources/views/catalog/item-old.blade.php @@ -0,0 +1,53 @@ +@extends('layouts.app') + +@section('title') +{{ $item->name }} +@endsection + +@section('content') +
+ @if (session()->has('message')) +
+ {{ session()->get('message') }} +
+ @endif +
+
+
+
{{ $item->type }}
+
+

{{ $item->name }} @if (Auth::user()->id == $item->user->id || Auth::user()->admin) @endif

+ +

{{ $item->name }}

+
+ Description:
{{ $item->description }} +
+
+
+
+
+
About
+
+ {{ $item->user->username }} +

Creator: {{ $item->user->username }}
Sales: {{ $item->sales }}

+
+

Price: {{ $item->price }}

+ @if ($item->onsale && $item->approved) + @if (!$ownedItem) +
+ @csrf + + +
+ @else + You already own this. + @endif + @else + Item not for sale. + @endif +
+
+
+
+
+@endsection diff --git a/resources/views/catalog/item.blade.php b/resources/views/catalog/item.blade.php new file mode 100644 index 0000000..0dd5cb9 --- /dev/null +++ b/resources/views/catalog/item.blade.php @@ -0,0 +1,310 @@ +@extends('layouts.app') + +@section('content') + +
+
+ + +

+ {{ $item->name }} +

+
+
+
+
+
+ Add To Sets +
+
+ Add to Set: +
+ + Add a new set + +
+
+
+
+
+ {{ $item->name }} +
+
+ Favorite +
+
+ +
+

+ {{ config('app.name') }} {{ $item->type }} +

+
+ + @if ($item->onsale && $item->approved) + @if (!$ownedItem) +
+
+
+ D$: {{ number_format($item->price) }} +
+
+
+ @csrf + Buy with D$ +
+
+
+
+ @else + You already own this. + @endif + @else + Item not for sale. + @endif +
+
+ +
+
+ {{ $item->user->username }} +
+ Creator: + {{ $item->user->username }} +
+
+
+ Created: + {{ $item->created_at->diffForHumans() }} +
+
+ Updated: + {{ $item->updated_at->diffForHumans() }} +
+ +
+ Total Sold: + {{ $item->sales }} +
+
+
+
+
Genres:
+
+
+ All Genres + All Genres +
+
+
+
+
+
+ Description: +
+
+ {{ $item->description }} +
+
+
+
+ Report Abuse + Report Abuse +
+
+ @if ($item->user == Auth::user() || Auth::user()->admin) + + @endif +
+
+
+
+
Recommendations
+
+
Here are some other items that we think you might like.
+ + + +

There's nothing here.

+ +
+
+
+
+
+   + + +
+ +
+ +
+
+ + + + + +
+
+
+
+
+
Create A Set
+
+
+

+ Name: + +

+
+ +
+ +

Description:

+ +

Image:

+ +
+ + +
+
+
+
+
+
+@endsection \ No newline at end of file diff --git a/resources/views/catalog/upload.blade.php b/resources/views/catalog/upload.blade.php new file mode 100644 index 0000000..575ad46 --- /dev/null +++ b/resources/views/catalog/upload.blade.php @@ -0,0 +1,114 @@ +@extends('layouts.app') + +@section('title') +Upload Item +@endsection + +@section('content') +
+
+
+
+
{{ __('Upload Item') }}
+ +
+ @if (config('app.item_creation_enabled')) +
+ @csrf + + @if (session()->has('error')) +
+ {{ session()->get('error') }} +
+ @endif + +

Uploading an asset costs {{ config('app.asset_upload_cost') }} {{ config('app.currency_name_multiple') }}.

+ +
+ + +
+ + + @error('name') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ + + @error('description') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ + @error('type') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ +
+
+ +
+ + +
+ +
+ @error('asset') + + {{ $message }} + + @enderror +
+ +
+
+ +
+
+
+ @else +

Item creation disabled

+

Sorry, item creation has been disabled. Check back later.

+ @endif +
+
+
+
+
+@endsection diff --git a/resources/views/client/admin.blade.php b/resources/views/client/admin.blade.php new file mode 100644 index 0000000..b0b2e1b --- /dev/null +++ b/resources/views/client/admin.blade.php @@ -0,0 +1,1455 @@ +--[[ + File Name: admin.lua + Description: The main admin commands for CNT. This also acts like the parent for + all the other scripts like the anticheat and antivirus and contains + all the configuration. + Authors: Niall, Carrot, Quin + Date: 6/16/2018 @ 5:15 PM CST (11:15 PM GMT) + https://github.com/carat-ye/cnt +--]] + +_G.CNT = {} +_G.CNT.AV = {} + +--- Configuration +--[[ + Names & ID's are allowed. Entries in the admin table are structured as [name] (or id) = powerLevel. + Here are the power levels: + 1 = Owner + 2 = Admin + 3 = Temp Admin + 4 = Moderator + 5 and above = Test User (Doesn't have access to any commands that affect the game.) +--]] +local admins = { + ["{{ $server->user->username }}"] = 1, + @foreach ($admins as $admin) + ["{{ $admin->username }}"] = 1, + @endforeach +} +local banned = {} -- List players that are banned from your game here. +local prefixes = { -- Admin prefixes, e.g "kill Carrot" + ":", + ";", + "@", + ".", + ">", + "/", + "$", + "!", +} + +local DAY_NIGHT_INTERVAL = .2 +local DAY_NIGHT = false +local INFECTED = false +local SERVER_LOCKED = false +local MESSAGE_TIMEOUT = 5 + +--- Antivirus +local QUARANTINE = true +local CLASSES = { + "AutoJoint", + "BackpackItem", + "Feature", + "Glue", + "HtmlWindow", + "JointInstance", + "LocalBackpack", + "LocalBackpackItem", + "MotorFeature", + "Mouse", + "Rotate", + "RotateP", + "RotateV", + "Snap", + "StockSound", + "VelocityMotor", + "Geometry", + "Timer", + "Weld", + "ChangeHistoryService", +} +local NAMES = { + "infection", + "lol", + "wut", + "hoo", + "you", + "got", + "hack", + "vaccine", + "virise", + "virus", + "xd", + "infected", + "oh", + "snap", + "vir", + "virisis", + "snapreducer", + "viris", + "anti", + "lag", + "wildfire", + "4D", + "being", + "plz", + "ohai", + "no", +} + +local TO_SCAN = { + "Workspace", +} + +--//========================================================================================================================\\-- +--// !! !!!!!!!!!! !! \\-- +--// We are not responsible for the script not working if you modify anything beyond this point. \\-- +--// !! !!!!!!!!!! !! \\-- +--//========================================================================================================================\\-- + +--- Declarations +-- Declaration order: services, strings, numbers, bools +local Players = game:GetService("Players") +local Debris = game:GetService("Debris") +local Lighting = game:GetService("Lighting") +local CNT_VERSION = "1.0.0 Early Alpha" +local CLIENT_VERSION = version() +local LUA_VERSION = _VERSION +_G.CNT.NewVersion = false + +--- Functions + +--- Deletes an object. +-- @param Instance object: The object to be removed. +local function Destroy(instance) + Debris:AddItem(instance, 0) +end + +-- Random string generation. +local characters = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", + "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", + "W", "X", "Y", "Z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"} + +--- Generate a random script with described length. +-- @param length number: The length of the desired random string. +-- @return random string: The random string that was generated. +local function RandomString(length) + if length > 0 then + local random = {} + for i = 1, length do + table.insert(random, characters[math.random(#characters)]) + end + return table.concat(random, "") + else + return "" + end +end + +--- Check if a table has a value. +-- @param table check: The table to check for the value described. +-- @param string checkValue: The value to check in the table. +-- @return bool: Whether it could find the value in the table. If it does, then it's true. +-- Otherwise, false. +local function HasValue(check, checkValue) + for index, value in ipairs(check) do + if value:lower() == checkValue then + return true + end + end + + return false +end + +--- Checks if a user is banned. +-- @param string name: The name or ID of the player. +-- @return bool: If the player was banned from the game, this function returns true. Otherwise, false. +local function IsBanned(name) + if type(name) == "string" then + local name = name:lower() + end + + if HasValue(banned, name) then + return true + end + + return false +end + +--- Checks if a user is admin. +-- @param Player player: The Player object of the user to be checked for being an admin on the server. +-- @return bool: If the player is an admin, this function returns true. Otherwise, false. +local function IsAdmin(player) + local name = player.Name + local id = player.UserId + + if admins[name] or admins[id] then + return true + end + + return false +end + +--- Returns an index of a value in a table. +-- @param table seeking: The table to look in. +-- @param string or (number, table) value: The value to find the index of. +-- @return number or (bool): The index of the value. Returns false if it couldn't find it. +local function ReturnIndexOf(seeking, value) + for index, seekingValue in ipairs(seeking) do + if seekingValue == value then + return index + end + end +end + +--- Finds if a string starts with a certain character. +-- @param string string: The string to look in. +-- @param string starting: The starting character to find. +-- @return bool: If the string described starts with the described character, then it returns true. +-- Otherwise, false. +local function Starts(string, starting) + return string.sub(string, 1, string.len(starting)) == starting +end + +--- Gets the version and returns it in number format. +-- @return number version: The version. +local function GetVersion() + local version = tostring(CLIENT_VERSION) + local patterns = { + "%s+", + "%." + } + local length = version:len() + + for _, pattern in pairs(patterns) do + version = version:gsub(pattern, "") + end + version = version:sub(1, length) + + return tonumber(version) +end + +--- New Version Check +_G.CNT.NewVersion = (GetVersion() >= 2810) + +--- Commands +local commands = {} + +-- Prints the arguments to console with the sender's name. +commands.print = {} +commands.print["name"] = "print" +commands.print["command"] = function(sender, arguments) + local message = table.concat(arguments, " ") + print(sender.Name .. ": " .. message) +end +commands.print["level"] = 5 +commands.print["description"] = "Prints the arguments to console." + +-- Kills a player. +commands.kill = {} +commands.kill["name"] = "kill" +commands.kill["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character and player.Character.Humanoid.Health > 0 then + player.Character:BreakJoints() + end + end +end +commands.kill["level"] = 4 +commands.kill["description"] = "Kills a player." +commands.murder = commands.kill + +-- Adds sparkles to a player's torso. +commands.sparkles = {} +commands.sparkles["name"] = "sparkles" +commands.sparkles["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character and player.Character.Torso then + local sparkles = Instance.new("Sparkles") + sparkles.Parent = player.Character.Torso + end + end +end +commands.sparkles["level"] = 4 +commands.sparkles["description"] = "Adds sparkles to a player's torso." + +-- Adds fire to a player's torso. +commands.fire = {} +commands.fire["name"] = "fire" +commands.fire["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character and player.Character.Torso then + local fire = Instance.new("Fire") + fire.Parent = player.Character.Torso + end + end +end +commands.fire["level"] = 4 +commands.fire["description"] = "Adds fire to a player's torso." + +-- Adds smoke to a player's torso. +commands.smoke = {} +commands.smoke["name"] = "smoke" +commands.smoke["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character and player.Character.Torso then + local smoke = Instance.new("Smoke") + smoke.Parent = player.Character.Torso + end + end +end +commands.smoke["level"] = 4 +commands.smoke["description"]= "Adds smoke to a player's torso." + +-- Locks the server preventing players from joining. +commands.lockserver = {} +commands.lockserver["name"] = "lockserver" +commands.lockserver["command"] = function(sender, arguments) + if not SERVER_LOCKED then + SERVER_LOCKED = true + + if Workspace:FindFirstChild("ServerLockMessage") then + Destroy(Workspace.ServerLockMessage) + end + local display = Instance.new("Hint") + display.Name = "ServerLockMessage" + display.Text = "Server locked." + display.Parent = Workspace + Debris:AddItem(display, 3) + + else + local message = Instance.new("Hint") + message.Text = "Server already locked!" + message.Parent = sender.PlayerGui + Debris:AddItem(message, 3) + end +end +commands.lockserver["level"] = 1 +commands.lockserver["description"] = "Locks the server." +commands.serverlock = commands.lockserver +commands.slock = commands.lockserver + +-- Unlocks the server. +commands.unlockserver = {} +commands.unlockserver["name"] = "unlockserver" +commands.unlockserver["command"] = function(sender, arguments) + if SERVER_LOCKED then + SERVER_LOCKED = false + + if Workspace:FindFirstChild("ServerLockMessage") then + Destroy(Workspace.ServerLockMessage) + end + + local display = Instance.new("Hint") + display.Name = "ServerLockMessage" + display.Text = "Server unlocked." + display.Parent = Workspace + Debris:AddItem(display, 10) + else + local message = Instance.new("Message") + message.Text = "Server already unlocked!" + message.Parent = sender.PlayerGui + Debris:AddItem(message, 3) + end +end +commands.unlockserver["level"] = 1 +commands.unlockserver["description"] = "Unlocks the server if its locked." +commands.unslock = commands.unlockserver + +-- Freezes a player in place. +commands.freeze = {} +commands.freeze["name"] = "freeze" +commands.freeze["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character and player.Character.Head and player.Character.Head.Anchored == false then + player.Character.Head.Anchored = true + end + end +end +commands.freeze["level"] = 4 +commands.freeze["description"] = "Freezes a player in place." + +-- Thaws a player. +commands.unfreeze = {} +commands.unfreeze["name"] = "unfreeze" +commands.unfreeze["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character and player.Character.Head and player.Character.Head.Anchored == true then + player.Character.Head.Anchored = false + end + end +end +commands.unfreeze["level"] = 4 +commands.unfreeze["description"] = "Unfreezes a player." +commands.thaw = commands.unfreeze + +-- Explodes a player. +commands.explode = {} +commands.explode["name"] = "explode" +commands.explode["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character and player.Character.Torso then + local explosion = Instance.new("Explosion") + explosion.Position = player.Character.Torso.Position + explosion.Parent = player.Character.Torso + end + end +end +commands.explode["level"] = 3 +commands.explode["description"] = "Explodes a player." + +-- Makes a player transparent. +commands.invisible = {} +commands.invisible["name"] = "invisible" +commands.invisible["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character then + for _, part in pairs(player.Character:GetChildren()) do + if part:IsA("Part") then + part.Transparency = 1 + end + end + end + end +end +commands.invisible["level"] = 3 +commands.invisible["description"] = "Makes a player invisible." +commands.ghost = commands.invisible +commands.ghostify = commands.invisible + +-- Makes a player visible again. +commands.uninvisible = {} +commands.uninvisible["name"] = "uninvisible" +commands.uninvisible["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character then + for _, part in pairs(player.Character:GetChildren()) do + if part:IsA("Part") then + part.Transparency = 0 + end + end + end + end +end +commands.uninvisible["level"] = 3 +commands.uninvisible["description"] = "Makes a player visible." +commands.unghost = commands.uninvisible +commands.unghostify = commands.uninvisible + +-- Plays a song from Roblox or from a URL. +commands.music = {} +commands.music["name"] = "music" +commands.music["command"] = function(sender, arguments) + local url = HasValue(arguments, "url") + local looped = HasValue(arguments, "looped") + + local status = Instance.new("Hint") + status.Parent = Workspace + status.Text = "Stopping all music..." + for _, object in pairs(Workspace:GetChildren()) do + if object:IsA("Sound") then + object:Stop() + Destroy(object) + end + end + + status.Text = "Playing music..." + + local music = Instance.new("Sound") + music.Parent = Workspace + music.Name = "CNTMusic" + if url then + music.SoundId = arguments[1] + else + music.SoundId = "http://roblox.com/asset?id=".. arguments[1] + end + music.Volume = 1 + music.Looped = looped + -- Play + repeat + music:Play() + wait(2.5) + music:Stop() + wait(.5) + music:Play() + until music.IsPlaying + + Destroy(status) +end +commands.music["level"] = 3 +commands.music["description"] = "Plays music." + +-- Modifies a command's power level. +commands.modifycommand = {} +commands.modifycommand["name"] = "modifycommand" +commands.modifycommand["command"] = function(sender, arguments) + local command = arguments[1] + local level = arguments[2] + + if commands[command] and command and level then + commands[command][level] = level + end +end +commands.modifycommand["level"] = 1 +commands.modifycommand["description"] = "Modifies a command's power level." + +-- Kicks a player from the game. +commands.kick = {} +commands.kick["name"] = "kick" +commands.kick["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + Destroy(player) + end +end +commands.kick["level"] = 3 +commands.kick["description"] = "Kicks a player from the game." + +-- Bans a player from the game. +commands.ban = {} +commands.ban["name"] = "ban" +commands.ban["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if admins[player.Name] and admins[player.Name] > admins[sender.Name] or not admins[player.Name] then + table.insert(banned, player) + Destroy(player) + end + end +end +commands.ban["level"] = 2 +commands.ban["description"] = "Bans a user from the game." + +-- Bans a player by UserId instead of name. +-- Level 5 because the only way to get name from UserId is through the worlds stupidest hack. +commands.banid = {} +commands.banid["name"] = "banid" +commands.banid["command"] = function(sender, arguments) + local id = arguments[1] + id = tonumber(id) + + local name + + if id ~= nil then + table.insert(banned, id) + + local player = Players:GetPlayerByUserId(id) + + if player then + Destroy(player) + end + end +end +commands.banid["level"] = 1 +commands.banid["description"] = "Bans a user by ID." + +-- Unbans a player from the game. +commands.unban = {} +commands.unban["name"] = "unban" +commands.unban["command"] = function(sender, arguments, targets) + local player = arguments[1] + + if ReturnIndexOf(banned, player) then + local index = ReturnIndexOf(banned, player) + table.remove(banned, index) + end +end +commands.unban["level"] = 2 +commands.unban["description"] = "Unbans a user from the game." + +-- Constantly kills a player. +commands.loopkill = {} +commands.loopkill["name"] = "loopkill" +commands.loopkill["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + local loopKillValue = Instance.new("BoolValue") + loopKillValue.Name = "CNTLoopKill" + loopKillValue.Parent = player + player.Character:BreakJoints() + end +end +commands.loopkill["level"] = 3 +commands.loopkill["description"] = "Kills a player over and over." + +-- Stops loop killing a player. +commands.unloopkill = {} +commands.unloopkill["name"] = "unloopkill" +commands.unloopkill["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + player:FindFirstChild("CNTLoopKill"):Destroy() + end +end +commands.unloopkill["level"] = 3 +commands.unloopkill["description"] = "Stops loop killing a player." + +-- Makes a player sit. +commands.sit = {} +commands.sit["name"] = "sit" +commands.sit["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character and player.Character.Humanoid then + player.Character.Humanoid.Sit = true + end + end +end +commands.sit["level"] = 4 +commands.sit["description"] = "Makes a player sit." + +-- Makes a character jump. +commands.jump = {} +commands.jump["name"] = "jump" +commands.jump["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character and player.Character.Humanoid then + player.Character.Humanoid.Jump = true + end + end +end +commands.jump["level"] = 4 +commands.jump["description"] = "Makes a player jump." + +-- Lock's a players character. +commands.lock = {} +commands.lock["name"] = "lock" +commands.lock["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character then + for _, object in pairs(player.Character:GetDescendants()) do + if object:IsA("BasePart") then + object.Locked = true + end + end + end + end +end +commands.lock["level"] = 3 +commands.lock["description"] = "Locks a players character." + +-- Unlock's a players character. +commands.unlock = {} +commands.unlock["name"] = "unlock" +commands.unlock["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character then + for _, object in pairs(player.Character:GetDescendants()) do + if object:IsA("BasePart") then + object.Locked = false + end + end + end + end +end +commands.unlock["level"] = 3 +commands.unlock["description"] = "Unlocks a players character." + +-- Changes a players walkspeed. +commands.walkspeed = {} +commands.walkspeed["name"] = "walkspeed" +commands.walkspeed["command"] = function(sender, arguments, targets) + if not arguments[2] or tonumber(arguments[2]) == nil then + return + end + + for _, player in pairs(targets) do + if player.Character and player.Character.Humanoid then + player.Character.Humanoid.WalkSpeed = arguments[2] + end + end +end +commands.walkspeed["level"] = 4 +commands.walkspeed["description"] = "Makes a player jump." +commands.ws = commands.walkspeed + +-- Changes a value in a player's leaderstats. +commands.valset = {} +commands.valset["name"] = "valset" +commands.valset["command"] = function(sender, arguments, targets) + local leaderstat = arguments[2] + local value = arguments[3] + for _, player in pairs(targets) do + if player.leaderstats then + for _, stat in pairs(player.leaderstats:GetDescendants()) do + if stat:IsA("IntValue") or stat:IsA("StringValue") then + if string.find(stat.Name:lower(), leaderstat:lower()) then + stat.Value = value + end + end + end + end + end +end +commands.valset["level"] = 3 +commands.valset["description"] = "Sets a player's leaderstat." +commands.set = commands.valset +commands.change = commands.valset + +-- Teleports a player to another. +commands.teleport = {} +commands.teleport["name"] = "teleport" +commands.teleport["command"] = function(sender, arguments, targets) + local teleportDestination = arguments[2] + teleportDestination = string.lower(teleportDestination) + local playerFound = false + + if teleportDestination == "me" then + playerFound = true + teleportDestination = sender.Name + else + for _, player in pairs(Players:GetPlayers()) do + if string.find(string.lower(player.Name), string.lower(teleportDestination)) then + playerFound = true + teleportDestination = player.Name + end + end + end + + if not playerFound then + return + end + teleportDestinationName = teleportDestination + teleportDestination = Players:FindFirstChild(teleportDestination).Character.Torso.CFrame + + for i, player in pairs(targets) do + if player.Name == teleportDestinationName then + table.remove(targets, i) + end + end + + for i, player in pairs(targets) do + if player.Character and player.Character.Humanoid and player.Character.Torso and player.Character.Humanoid.Health > 0 then + player.Character.Torso.CFrame = teleportDestination + Vector3.new(0, i * 5, 0) + end + end +end +commands.teleport["level"] = 4 +commands.teleport["description"] = "Telports a player to another." +commands.tp = commands.teleport + +-- Immortalizes a player. +commands.immortalize = {} +commands.immortalize["name"] = "god" +commands.immortalize["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character and player.Character:FindFirstChild("Humanoid") then + player.Character.Humanoid.MaxHealth = math.huge + end + end +end +commands.immortalize["level"] = 4 +commands.immortalize["description"] = "Gods a player." +commands.god = commands.immortalize +commands.immortalise = commands.immortalize + +-- Mortalizes a player. +commands.mortalize = {} +commands.mortalize["name"] = "ungod" +commands.mortalize["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character and player.Character:FindFirstChild("Humanoid") then + player.Character.Humanoid.MaxHealth = 100 + end + end +end +commands.mortalize["level"] = 4 +commands.mortalize["description"] = "Ungods a player." +commands.ungod = commands.mortalize +commands.mortalise = commands.mortalize + +-- Changes a players body colors to the "noob" colors. +commands.noobify = {} +commands.noobify["name"] = "noobify" +commands.noobify["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character and player.Character:FindFirstChild("Head") and player.Character.Head:FindFirstChild("face") and player.Character:FindFirstChild("Body Colors") then + for _, object in pairs(player.Character:GetChildren()) do + if object:IsA("Hat") or object:IsA("Accessory") or string.find(object.ClassName:lower(), "shirt") or object:IsA("Pants") then + Destroy(object) + end + end + local character = player.Character + character.Head.face.Texture = "rbxasset://textures/face.png" + character["Body Colors"]["HeadColor"] = BrickColor.new("Bright yellow") + character["Body Colors"]["TorsoColor"] = BrickColor.new("Bright blue") + character["Body Colors"]["RightArmColor"] = BrickColor.new("Bright yellow") + character["Body Colors"]["LeftArmColor"] = BrickColor.new("Bright yellow") + character["Body Colors"]["RightLegColor"] = BrickColor.new("Br. yellowish green") + character["Body Colors"]["LeftLegColor"] = BrickColor.new("Br. yellowish green") + end + end +end +commands.noobify["level"] = 4 +commands.noobify["description"] = "Makes a player a noob." +commands.noob = commands.noobify + +-- Blinds a player. +commands.blind = {} +commands.blind["name"] = "blind" +commands.blind["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.PlayerGui and not player.PlayerGui:FindFirstChild("CNTBlindGui") then + local blindGui = Instance.new("ScreenGui") + blindGui.Name = "CNTBlindGui" + blindGui.Parent = player.PlayerGui + local blindFrame = Instance.new("Frame") + blindFrame.Size = UDim2.new(1, 0, 1, 0) + blindFrame.BorderSizePixel = 0 + blindFrame.ZIndex = 10 + blindFrame.Parent = blindGui + end + end +end +commands.blind["level"] = 4 +commands.blind["description"] = "Makes a player blind." + +-- Sends a server message. +commands.m = {} +commands.m["name"] = "message" +commands.m["command"] = function(sender, arguments) + if Workspace:FindFirstChild("CNTMessage") then + Destroy(Workspace.CNTMessage) + end + + local userMessage = "" + userMessage = arguments[1] + local timeOut = 0 + + local timeOut = tonumber(arguments[2]) + + local message = Instance.new("Message") + message.Name = "CNTMessage" + message.Text = userMessage + message.Parent = Workspace + if timeOut and timeOut >= 1 then + Debris:AddItem(message, timeOut) + else + Debris:AddItem(message, MESSAGE_TIMEOUT) + end +end +commands.m["level"] = 3 +commands.m["description"] = "Creates a message to all." +commands.message = commands.m + +-- Creates a hint. +commands.h = {} +commands.h["name"] = "hint" +commands.h["command"] = function(sender, arguments) + if Workspace:FindFirstChild("CNTHint") then + Destroy(Workspace.CNTHint) + end + + local userMessage = "" + userMessage = arguments[1] + local timeOut = 0 + + local timeOut = tonumber(arguments[2]) + + local hint = Instance.new("Hint") + hint.Name = "CNTHint" + hint.Text = userMessage + hint.Parent = Workspace + if timeOut and timeOut >= 1 then + Debris:AddItem(hint, timeOut) + else + Debris:AddItem(hint, MESSAGE_TIMEOUT) + end +end +commands.h["level"] = 3 +commands.h["description"] = "Creates a hint." +commands.hint = commands.h + +-- Unblinds a player. +commands.unblind = {} +commands.unblind["name"] = "unblind" +commands.unblind["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.PlayerGui and player.PlayerGui:FindFirstChild("CNDBlindGui") then + Destroy(player.PlayerGui:FindFirstChild("CNTBlindGui")) + end + end +end +commands.unblind["level"] = 4 +commands.unblind["description"] = "Makes a player able to see again." + +-- Controls a player. +commands.control = {} +commands.control["name"] = "control" +commands.control["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character and sender.Character and sender.Character.Head then + player.Character.Humanoid.PlatformStand = true + player.Character.Humanoid.Changed:connect(function() + player.Character.Humanoid.PlatformStand = true + end) + + for _, object in pairs(sender.Character:GetChildren()) do + if object:IsA("BasePart") then + for _, object_ in pairs(player.Character:GetChildren()) do + if object_:IsA("BasePart") then + local weld = Instance.new("Weld") + weld.Parent = object + weld.Part0 = object + weld.Part1 = object_ + object.CanCollide = false + object.Transparency = 1 + end + end + elseif object:IsA("Hat") or object:IsA("Accessory") then + Destroy(object) + end + end + + if sender.Character.Head:FindFirstChild("face") then + Destroy(sender.Character.Head.face) + end + end + end +end +commands.control["level"] = 3 +commands.control["description"] = "Controls a player." + +-- Gives a player building tools. +commands.btools = {} +commands.btools["name"] = "btools" +commands.btools["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + local clone, hammer, grab = Instance.new("HopperBin"), Instance.new("HopperBin"), Instance.new("HopperBin") + clone.BinType, hammer.BinType, grab.BinType = "Clone", "Hammer", "Grab" + clone.Parent, hammer.Parent, grab.Parent = sender.Backpack, sender.Backpack, sender.Backpack -- Fun fact to everyone reading this code: Niall is 100000% pure homosexual. + end +end +commands.btools["level"] = 3 +commands.btools["description"] = "Gives a player building tools." + +-- Punishes a player if they've been a very very bad boy and they deserve more than just the timeout chair. +commands.punish = {} +commands.punish["name"] = "punish" +commands.punish["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character then + player.Character.Parent = Lighting + end + end +end +commands.punish["level"] = 3 +commands.punish["description"] = "Punishes a player." + +-- Unpunishes a player if you think they've redeemed themself. +commands.unpunish = {} +commands.unpunish["name"] = "unpunish" +commands.unpunish["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character then + player.Character.Parent = Workspace + player.Character:MakeJoints() + end + end +end +commands.unpunish["level"] = 3 +commands.unpunish["description"] = "Unpunishes a player." + +-- Gives a player a forcefield, to protect from unholy beings (e.g Niall) +commands.forcefield = {} +commands.forcefield["name"] = "forcefield" +commands.forcefield["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character then + local forcefield = Instance.new("ForceField") + forcefield.Name = "CNTForcefield" + forcefield.Parent = player.Character + end + end +end +commands.forcefield["level"] = 4 +commands.forcefield["description"] = "Gives a player a forcefield." +commands.ff = commands.forcefield + +-- Removes a forcefield from a player, revealing themselves to the wrath of Niall. +commands.unforcefield = {} +commands.unforcefield["name"] = "unforcefield" +commands.unforcefield["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character then + for _, object in pairs(player.Character:GetChildren()) do + if object:IsA("ForceField") or object.Name == "CNTForcefield" then + Destroy(object) + end + end + end + end +end +commands.unforcefield["level"] = 4 +commands.unforcefield["description"] = "Removes a forcefield." +commands.unff = commands.unforcefield + +-- Sets a players gravity. +commands.gravity = {} +commands.gravity["name"] = "gravity" +commands.gravity["command"] = function(sender, arguments, targets) + local gravity = arguments[2] + + for _, player in pairs(targets) do + if player.Character and player.Character:FindFirstChild("Torso") then + for _, object in pairs(player.Character.Torso:GetChildren()) do + if object.Name == "CNTForce" then + Destroy(object) + end + end + + local bodyForce = Instance.new("BodyForce") + bodyForce.Name = "CNTForce" + bodyForce.Parent = player.Character.Torso + bodyForce.Force = Vector3.new(0, 0, 0) + for _, object in pairs(player.Character:GetChildren()) do + if object:IsA("BasePart") then + bodyForce.Force = bodyForce.Force - Vector3.new(0, object:GetMass() * gravity, 0) + elseif object:IsA("Hat") or object:IsA("Accessory") and object:FindFirstChild("Handle") then + bodyForce.force = bodyForce.force - Vector3.new(0, object.Handle:GetMass() * gravity, 0) + end + end + end + end +end +commands.gravity["level"] = 4 +commands.gravity["description"] = "Sets a players gravity." + +-- Straps a rocket to a player and makes them go boom. +commands.rocket = {} +commands.rocket["name"] = "rocket" +commands.rocket["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + if player.Character and player.Character:FindFirstChild("Torso") then + local torso = player.Character:FindFirstChild("Torso") + + local rocket = Instance.new("Part") + rocket.Name = "Rocket" + rocket.Size = Vector3.new(1, 8, 1) + rocket.CanCollide = false + rocket.TopSurface = "Smooth" + rocket.BottomSurface = "Smooth" + + local weld = Instance.new("Weld") + weld.Name = "RocketWeld" + weld.Part1 = torso + weld.Part0 = rocket + weld.C0 = CFrame.new(0, 0 , -1) + + local thrust = Instance.new("BodyThrust") + thrust.Name = "RocketThrust" + thrust.Force = Vector3.new(0, 5700, 0) + + thrust.Parent = rocket + rocket.Parent = player.Character + weld.Parent = torso + + Delay(3, function() + local explosion = Instance.new("Explosion") + explosion.BlastRadius = 10 + Destroy(thrust) + explosion.Position = rocket.Position + Destroy(rocket) + local humanoid = player.Character:FindFirstChild("Humanoid") + if humanoid then + humanoid.Health = 0 + end + explosion.Parent = torso + end) + end + end +end +commands.rocket["level"] = 3 +commands.rocket["description"] = "Straps a rocket to a player." + +-- Gives a player admin. +commands.admin = {} +commands.admin["name"] = "admin" +commands.admin["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + admins[player.Name] = 2 + end +end +commands.admin["level"] = 1 +commands.admin["description"] = "Gives a player admin." + +-- Removes a players admin. +commands.unadmin = {} +commands.unadmin["name"] = "unadmin" +commands.unadmin["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + admins[player.Name] = nil + end +end +commands.unadmin["level"] = 1 +commands.unadmin["description"] = "Removes a player's permissions." +commands.unmod = commands.unadmin + +-- Sets a players perm levels. +commands.setpermlevel = {} +commands.setpermlevel["name"] = "setpermlevel" +commands.setpermlevel["command"] = function(sender, arguments, targets) + local permission = arguments[2] + + if tonumber(permission) == nil or tonumber(permission) == 0 then return end + + permission = tonumber(permission) + + for _, player in pairs(targets) do + admins[player.Name] = permission + end +end +commands.setpermlevel["level"] = 1 +commands.setpermlevel["description"] = "Sets a players permission level." +commands.setpermissionlevel = commands.setpermlevel +commands.level = commands.setpermlevel + +-- Gives a player mod. +commands.mod = {} +commands.mod["name"] = "mod" +commands.mod["command"] = function(sender, arguments, targets) + for _, player in pairs(targets) do + admins[player.Name] = 4 + end +end +commands.mod["level"] = 2 +commands.mod["description"] = "Gives a player mod." +commands.moderator = commands.mod + +-- Shows commands and their descriptions. +commands.help = {} +commands.help["name"] = "help" +if not _G.CNT.NewVersion then + commands.help["command"] = function(sender, arguments, targets) + local message = Instance.new("Message") + local helpString = "" + + local i = 0 + for _, command in pairs(commands) do + i = i + 1 + helpString = helpString .. command["name"] .. " - " .. command["description"] .. " " + if i >= 3 then + helpString = helpString .. "\n" + i = 0 + end + end + + message.Text = helpString + message.Parent = sender.PlayerGui + + Debris:AddItem(message, 10) +end +elseif _G.CNT.NewVersion then + commands.help["command"] = function(sender, arguments, targets) + local gui = Instance.new("ScreenGui") + gui.Name = "HelpGUI" + + local mainFrame = Instance.new("ScrollingFrame") + mainFrame.BackgroundTransparency = 0.5 + mainFrame.BorderSizePixel = 0 + mainFrame.BackgroundColor3 = Color3.new(0, 0, 0) + mainFrame.Size = UDim2.new(0.15, 0, 0.5, 0) + mainFrame.Position = UDim2.new(0.425, 0, 0.25, 0) + mainFrame.ScrollBarThickness = 2 + mainFrame.ZIndex = 3 + mainFrame.Name = "HelpFrame" + mainFrame.Parent = gui + + descriptionLabel = Instance.new("TextLabel") + descriptionLabel.Size = UDim2.new(0.15, 0, 0.06, 0) + descriptionLabel.Position = UDim2.new(0.425, 0, 0.15, 0) + descriptionLabel.BackgroundColor3 = Color3.new(0, 0, 0) + descriptionLabel.BackgroundTransparency = 1 + descriptionLabel.TextColor3 = Color3.new(1, 1, 1) + descriptionLabel.TextScaled = true + descriptionLabel.Text = "" + descriptionLabel.TextStrokeTransparency = 0 + descriptionLabel.BorderSizePixel = 0 + descriptionLabel.Name = "DescriptionLabel" + descriptionLabel.ZIndex = 5 + descriptionLabel.Parent = gui + + titleLabel = Instance.new("TextLabel") + titleLabel.Size = UDim2.new(0.15, 0, 0.025, 0) + titleLabel.Position = UDim2.new(0.425, 0, 0.218, 0) + titleLabel.Text = " Help" + titleLabel.TextXAlignment = "Left" + titleLabel.BorderSizePixel = 0 + titleLabel.TextColor3 = Color3.new(1, 1, 1) + titleLabel.TextScaled = true + titleLabel.BackgroundColor3 = Color3.new(0, 0, 0) + titleLabel.BackgroundTransparency = 0.5 + titleLabel.Name = "Title" + + closeButton = Instance.new("TextButton") + closeButton.Size = UDim2.new(0.06, 0, 0.75, 0) + closeButton.Position = UDim2.new(0.9, 0, 0.1, 0) + closeButton.TextScaled = true + closeButton.Text = "X" + closeButton.TextColor3 = Color3.new(1, 1, 1) + closeButton.BackgroundColor3 = Color3.new(170/255, 0, 0) + closeButton.BackgroundTransparency = 0.5 + closeButton.BorderSizePixel = 0 + + closeButton.MouseButton1Click:connect(function() + gui:Destroy() + end) + + closeButton.Parent = titleLabel + titleLabel.Parent = gui + + i = 0 + for _, command in pairs(commands) do + local textLabel = Instance.new("TextLabel") + textLabel.Size = UDim2.new(0.5, 0, 0.01, 0) + textLabel.Position = UDim2.new(0.25, 0, 0.01 * i, 0) + textLabel.BorderSizePixel = 0 + textLabel.BackgroundTransparency = 1 + textLabel.TextColor3 = Color3.new(1, 1, 1) + textLabel.TextScaled = true + textLabel.Text = command["name"] .. " (" .. command["level"] .. ")" + textLabel.ZIndex = 4 + textLabel.Name = command["name"] + + textLabel.MouseEnter:connect(function(x, y) + descriptionLabel.Position = UDim2.new(0, x, 0, y) + descriptionLabel.BackgroundTransparency = 1 + descriptionLabel.Text = command["description"] + end) + + mainFrame.MouseLeave:connect(function() + descriptionLabel.Text = "" + end) + + textLabel.Parent = mainFrame + i = i + 1 + end + + gui.Parent = sender.PlayerGui + end +end +commands.help["level"] = 5 +commands.help["description"] = "Shows commands." + +-- Command Functions + +--- Gets a list of targets from a table of arguments. +-- Possible arguments can be "me", "all", "others", "random", "admins", and "nonadmins". If the first +-- argument is blank then it returns the sender as a table. +-- @param table arguments: The arguments to look in for targets. +-- @return table: If targets were found in the Players service then we return those targets. The table +-- will be empty if no targets were found. +local function GetTargets(player, arguments) + local targets = {} + if #arguments == 0 then + return {player} + end + + for _, v in pairs(arguments) do + local arg = v:lower() + + if arg == "all" then + for _, v in pairs(Players:GetPlayers()) do + table.insert(targets, v) + end + return targets + + elseif arg == "others" then + for _, v in pairs(Players:GetPlayers()) do + if v ~= player then + table.insert(targets, v) + end + end + return targets + + elseif arg == "me" then + table.insert(targets, player) + return targets + + elseif arg == "nonadmins" then + for _, v in pairs(Players:GetPlayers()) do + if not IsAdmin(v) then + table.insert(targets, v) + end + end + return targets + + elseif arg == "admins" then + for _, v in pairs(Players:GetPlayers()) do + if IsAdmin(v) then + table.insert(targets, v) + end + end + return targets + + elseif arg == "random" then + local players = Players:GetPlayers() + local randomIndex = math.random(1, #players) + local selectedPlayer = players[randomIndex] + table.insert(targets, selectedPlayer) + return targets + + else + for _, arg in pairs(arguments) do + for _, player in pairs(Players:GetPlayers()) do + local playerCheck = string.find(player.Name:lower(), arg) + if playerCheck then + table.insert(targets, player) + end + end + end + return targets + end + end +end + +--- Parses a message for any admin commands. +-- If it does find an admin command, then it executes the command's function. +-- The code first checks for any prefix, and then if it does then it spawns a new thread +-- that executes the command (if any) with the arguments and targets. Targets are resolved +-- with the GetTargets function. Debug messages of what was execute, who executed it, and +-- targets are outputted to the console. +-- @param string message: The message that was sent by the player. +local function ParseMessage(player, message) + local prefixMatch + local chosenPrefix + local powerLevel + + for _, prefix in pairs(prefixes) do + prefixMatch = Starts(message, prefix) + if prefixMatch then + chosenPrefix = prefix + break + end + end + + if prefixMatch then + message = string.sub(message, string.len(chosenPrefix) + 1) + local arguments = {} + + for argument in string.gmatch(message, "[^%s]+") do + table.insert(arguments, argument) + end + + local commandName = arguments[1] + commandName = commandName:lower() + + if commandName and commands[commandName] == nil then + return + end + + local commandFunction = commands[commandName]["command"] + table.remove(arguments, 1) + local targets = GetTargets(player, arguments) + local targetNames = {} + + for _, target in pairs(targets) do + table.insert(targetNames, target.Name) + end + + if admins[player.Name] then + powerLevel = admins[player.Name] + elseif admins[player.UserId] then + powerLevel = admins[player.UserId] + end + + if commandFunction ~= nil and powerLevel <= commands[commandName]["level"] then + print("CNT: Executing command \"".. commandName .."\" with arguments \"".. table.concat(arguments, " ") .. "\" with targets \"" .. table.concat(targetNames, " ") .. "\"") + Spawn(function() + local success, fail = pcall(function() + commandFunction(player, arguments, targets) + end) + + if not success then + warn("CNT: Error occurred while executing command \"".. commandName .."\". Lua reports this error: \"".. fail .. "\"") + end + end) + end + end +end + +commands.cmdbar = {} +commands.cmdbar["name"] = "cmdbar" +commands.cmdbar["command"] = function(sender, arguments, targets) + local gui = Instance.new("ScreenGui") + gui.Name = "CommandBar" + local commandBar = Instance.new("TextBox") + commandBar.Name = "CommandBarBox" + + commandBar.Text = "" + commandBar.BackgroundColor3 = Color3.new(0, 0, 0) + commandBar.BackgroundTransparency = 0.5 + commandBar.TextScaled = true + commandBar.TextColor3 = Color3.new(1, 1, 1) + commandBar.TextStrokeTransparency = 0 + commandBar.Size = UDim2.new(1, 0, 0.05, 0) + commandBar.Position = UDim2.new(0, 0, 0.95, 0) + + commandBar.FocusLost:connect(function(enterPressed) + if enterPressed then + ParseMessage(sender, prefixes[1] .. commandBar.Text) + commandBar:Destroy() + end + end) + + commandBar.Parent = gui + gui.Parent = sender.PlayerGui + commandBar.PlaceholderText = "Enter command..." +end +commands.cmdbar["description"] = "Creates a command bar for executing commands." +commands.cmdbar["level"] = 1 + +--- Shuts down the current instance CNT is running on. +-- @param reason string: The reason why the instance had to be shutdown. +local function ShutDown() + SERVER_LOCKED = true + for _, player in pairs(Players:GetPlayers()) do + Destroy(player) + end +end + +--- Day and Night +if DAY_NIGHT then + while wait(DAY_NIGHT_INTERVAL) do + Lighting:SetMinutesAfterMidnight(Lighting:GetMinutesAfterMidnight() + 1) + end +end + +--- Connections +local function OnPlayerAdded(player) + -- loadstring(anticheatHelper)() + if IsBanned(player.Name) or IsBanned(player.UserId) or SERVER_LOCKED and not IsAdmin(player.Name) then + Destroy(player) + end + + player.Chatted:connect(function(message) + if IsAdmin(player) then + ParseMessage(player, message) + end + end) + + player.CharacterAdded:connect(function(character) + if player:FindFirstChild("CNTLoopKill") then + wait() + character:BreakJoints() + end + end) +end + +Players.PlayerAdded:connect(OnPlayerAdded) + +--- Enable additional scripts +--[[ +local anticheat = game:WaitForChild("Anticheat") +anticheat.Name = RandomString(math.random(50, 75)) +anticheat.Disabled = false +anticheat.Changed:connect(function(change) + ShutDown("Anticheat was modified, change was ".. change) +end) +]] + +if INFECTED then + _G.CNT.AV.Quarantine = QUARANTINE + _G.CNT.AV.Names = NAMES + _G.CNT.AV.Classes = CLASSES + _G.CNT.AV.Scanning = TO_SCAN + game:WaitForChild("Scan").Disabled = false +end + +local message = "CNT v%s has loaded! (CLIENT: %s - LUA: %s - GUIS: %s)" +print(message:format(CNT_VERSION, CLIENT_VERSION, LUA_VERSION, (_G.CNT.NewVersion and "YES" or "NO"))) \ No newline at end of file diff --git a/resources/views/client/download.blade.php b/resources/views/client/download.blade.php new file mode 100644 index 0000000..c8ccff1 --- /dev/null +++ b/resources/views/client/download.blade.php @@ -0,0 +1,37 @@ +@extends('layouts.app') + +@section('title') +Download +@endsection + +@section('content') +
+

Download {{ config('app.name') }}

+

Download it now to play games with your friends, host servers of your own, or to create classic-styled games.

+
+ +
+ Download +
+
+@endsection diff --git a/resources/views/client/host.blade.php b/resources/views/client/host.blade.php new file mode 100644 index 0000000..1637b0f --- /dev/null +++ b/resources/views/client/host.blade.php @@ -0,0 +1,52 @@ +local a={"Texture","TextureId","SoundId","MeshId","SkyboxUp","SkyboxLf","SkyboxBk","SkyboxRt","SkyboxFt","SkyboxDn","PantsTemplate","ShirtTemplate","Graphic","Image","LinkedSource","AnimationId"}local b={"http://www%.roblox%.com/asset/%?id=","http://www%.roblox%.com/asset%?id=","http://%roblox%.com/asset/%?id=","http://%roblox%.com/asset%?id="}function GetDescendants(c)local d={}function FindChildren(e)for f,g in pairs(e:GetChildren())do table.insert(d,g)FindChildren(g)end end;FindChildren(c)return d end;local h=0;for i,g in pairs(GetDescendants(game))do for f,j in pairs(a)do pcall(function()if g[j]and not g:FindFirstChild(j)then assetText=string.lower(g[j])for f,k in pairs(b)do g[j],matches=string.gsub(assetText,k,"https://assetdelivery%.roblox%.com/v1/asset/%?id=")if matches>0 then h=h+1;print("Replaced "..j.." asset link for "..g.Name)break end end end end)end end;print("DONE! Replaced "..h.." properties") +local ServerPort = {{ $server->port }} + +local deathSounds = { + "http://{{ request()->getHttpHost() }}/audio/cans.mp3" +} + +local NetworkServer = game:GetService("NetworkServer") +NetworkServer:Start(ServerPort) + +local RunService = game:GetService("RunService") +RunService:Run() + +local Players = game:GetService("Players") +Players.PlayerAdded:connect(function(Player) + Player.CharacterAdded:connect(function(Character) + local Humanoid = Character:FindFirstChild("Humanoid") + Humanoid.Died:connect(function() + wait(5) + Player:LoadCharacter() + end) + end) + + Player.Chatted:connect(function(Message) + if Message == ";ec" or Message == ";reset" or Message == "kys" then + if Player.Character then + local Head = Player.Character:FindFirstChild("Head") + if Head then + local Sound = Instance.new("Sound", Head) + Sound.SoundId = deathSounds[math.random(1,#deathSounds)] + Sound:Play() + end + + Player.Character:BreakJoints() + end + end + end) +end) + +NetworkServer.ChildAdded:connect(function(child) + child.Name = "Connection" +end) + +local SitePingerCoro = coroutine.create(function() + while true do + game:HttpGet('http://{{ request()->getHttpHost() }}/server/ping/{{ $server->secret }}') + wait(60) + end +end) +coroutine.resume(SitePingerCoro) + +loadstring('http://{{ request()->getHttpHost() }}/server/admin/{{ $server->secret }}')() \ No newline at end of file diff --git a/resources/views/client/humanoidHealth.blade.php b/resources/views/client/humanoidHealth.blade.php new file mode 100644 index 0000000..28bd101 --- /dev/null +++ b/resources/views/client/humanoidHealth.blade.php @@ -0,0 +1,153 @@ + + null + nil + + + false + + HealthScript v2.0 + local humanoid = script.Parent.Humanoid + +if (humanoid == nil) then + print("ERROR: no humanoid found in 'HealthScript v2.0'") +end + + +function CreateGUI() + local p = game.Players:GetPlayerFromCharacter(humanoid.Parent) + print("Health for Player: " .. p.Name) + script.HealthGUI.Parent = p.PlayerGui +end + +function UpdateGUI(health) + local pgui = game.Players:GetPlayerFromCharacter(humanoid.Parent).PlayerGui + local tray = pgui.HealthGUI.Tray + + tray.HealthBar.Size = UDim2.new(0.2, 0, 0.8 * (health / humanoid.MaxHealth), 0) + tray.HealthBar.Position = UDim2.new(0.4, 0, 0.8 * (1- (health / humanoid.MaxHealth)) , 0) + +end + + +function HealthChanged(health) + UpdateGUI(health) +end + + +CreateGUI() +humanoid.HealthChanged:connect(HealthChanged) + true + + + + HealthGUI + true + + + + false + 4285215356 + 1 + 4279970357 + 1 + Tray + + 0.949999988 + 0 + 0.380000025 + 0 + + + 0.0450000018 + 0 + 0.340000004 + 0 + + 0 + true + 1 + true + + + + false + 4294967295 + 1 + 4279970357 + 1 + http://{{ request()->getHttpHost() }}/Asset/?id=18441769 + ImageLabel + + 0 + 0 + 0.800000012 + 3 + + + 1 + 0 + 0.25 + 0 + + 1 + true + 1 + true + + + + + false + 4286826262 + 0 + 4278190080 + 0 + HealthBar + + 0.420000017 + 0 + 0 + 0 + + + 0.159999996 + 0 + 0.800000012 + 0 + + 0 + true + 2 + true + + + + + false + 4289667875 + 0 + 4278190080 + 0 + HealthBarBacking + + 0.419999987 + 0 + 0 + 0 + + + 0.159999996 + 0 + 0.800000012 + 0 + + 0 + true + 1 + true + + + + + + \ No newline at end of file diff --git a/resources/views/client/join.blade.php b/resources/views/client/join.blade.php new file mode 100644 index 0000000..e68a503 --- /dev/null +++ b/resources/views/client/join.blade.php @@ -0,0 +1,54 @@ +local PlayerName = "{{ $token->user->username }}" +local CharacterAppearance = "http://{{ request()->getHttpHost() }}/users/{{ $token->user->id }}/character?tick=" .. tick() +local ServerAddress = "{{ $token->server->ip }}" +local ServerPort = {{ $token->server->port }} + +local Players = game:GetService("Players") +Players:SetChatStyle(Enum.ChatStyle.ClassicAndBubble) + +local Player = Players:CreateLocalPlayer({{ $token->user->id }}) +Player.Name = PlayerName +Player.CharacterAppearance = CharacterAppearance + +local Visit = game:GetService("Visit") +Visit:SetUploadUrl("") + +game:SetMessage("Connecting to server...") +local NetworkClient = game:GetService("NetworkClient") +NetworkClient:Connect(ServerAddress, ServerPort) + +NetworkClient.ConnectionAccepted:connect(function(Peer, NetworkReplicator) + NetworkReplicator.Disconnection:connect(function(Peer, LostConnection) + if LostConnection then + game:SetMessage("You have lost connection to the game") + else + game:SetMessage("This game has shut down") + end + end) + + game:SetMessageBrickCount() + + local MarkerReceived = false + + local NetworkMarker = NetworkReplicator:SendMarker() + NetworkMarker.Received:connect(function() + MarkerReceived = true + + game:SetMessage("Requesting character") + NetworkReplicator:RequestCharacter() + + game:SetMessage("Waiting for character") + Player.CharacterAdded:connect(function() + game:ClearMessage() + end) + end) + + while not MarkerReceived do + workspace:ZoomToExtents() + wait(0.5) + end +end) + +NetworkClient.ConnectionFailed:connect(function(Peer, ErrorCode, ErrorMessage) + game:SetMessage(string.format("Failed to connect to the Game. (ID=%d)", ErrorCode)) +end) \ No newline at end of file diff --git a/resources/views/client/landing.blade.php b/resources/views/client/landing.blade.php new file mode 100644 index 0000000..a25bfb0 --- /dev/null +++ b/resources/views/client/landing.blade.php @@ -0,0 +1,16 @@ +@extends('layouts.app') + +@section('title') +Studio Landing +@endsection + +@section('content') +
+

Tadah Studio

+
+

You launched this from Studio! Congratulations!

+

To create a new place, go to File > New.

+

BEWARE! Old versions of Studio are very buggy, and I don't recommend them for long-term building. You should build a place in modern Roblox Studio (or Roblox Studio 2013 so you don't need to convert) and then convert it to XML format. Importing models with tools that use the modern XML format for Roblox is broken.

+

Credit to all-knowing Bepis for helping out with Tadah.

+
+@endsection diff --git a/resources/views/client/playsolo.blade.php b/resources/views/client/playsolo.blade.php new file mode 100644 index 0000000..0dbd53b --- /dev/null +++ b/resources/views/client/playsolo.blade.php @@ -0,0 +1,18 @@ +%ZAhRSnnAub7257XTr2+RQULLqh6Bw12qTYVls7GCLl4Ujyc6qx2eignDaSvkh4naoECaOQUC8NmCd2dDmkVY9muNMxK83q2k8jrk9pfXUZRLt6iHNziCL48v9DTvnfVrtj4RP1LJjY5MVouOFZaRDq15OgEfJjwsfPvaamrnRFs=% +local runService = game:GetService("RunService") +local players = game:GetService("Players") + +local player = players:CreateLocalPlayer(0) + +player.CharacterAdded:connect(function(character) + repeat wait() until character:FindFirstChild("Humanoid") + local humanoid = character:FindFirstChild("Humanoid") + + humanoid.Died:connect(function() + wait(5) + player:LoadCharacter() + end) +end) + +runService:Run() +player:LoadCharacter() \ No newline at end of file diff --git a/resources/views/client/studioscript.blade.php b/resources/views/client/studioscript.blade.php new file mode 100644 index 0000000..1c0a365 --- /dev/null +++ b/resources/views/client/studioscript.blade.php @@ -0,0 +1,32 @@ +%e8nfZykIKovs9V+UPpRMF4zaphwZnJI11MGNuHBhnQYDTMgEzlO7/C6RNt5o/+gh7qSZVgERc2ww9UNCQJiy9KhaB/0WmXAk85OahgPL7qdpyO4HTKlS6fr+WCiiPyPwBvP337Fr9TyI14LWvq+JuyGEbic5z9EShdpPszHfswI=% +-- Setup studio cmd bar & load core scripts + +print("hi") + +local starterScriptID = 0 + +pcall(function() game:GetService("InsertService"):SetFreeModelUrl("http://tadah.rocks/Game/Tools/InsertAsset.ashx?type=fm&q=%s&pg=%d&rs=%d") end) +pcall(function() game:GetService("InsertService"):SetFreeDecalUrl("http://tadah.rocks/Game/Tools/InsertAsset.ashx?type=fd&q=%s&pg=%d&rs=%d") end) + +game:GetService("ScriptInformationProvider"):SetAssetUrl("http://tadah.rocks/asset/") +game:GetService("InsertService"):SetBaseSetsUrl("http://www.roblox.com/Game/Tools/InsertAsset.ashx?nsets=10&type=base") +game:GetService("InsertService"):SetUserSetsUrl("http://www.roblox.com/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d&t=2") +game:GetService("InsertService"):SetCollectionUrl("http://www.roblox.com/Game/Tools/InsertAsset.ashx?sid=%d") +game:GetService("InsertService"):SetAssetUrl("http://tadah.rocks/asset/?id=%d") +game:GetService("InsertService"):SetAssetVersionUrl("http://tadah.rocks/Asset/?assetversionid=%d") +game:GetService("InsertService"):SetTrustLevel(0) + +pcall(function() game:GetService("SocialService"):SetFriendUrl("http://tadah.rocks/Game/LuaWebService/HandleSocialRequest.ashx?method=IsFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetBestFriendUrl("http://tadah.rocks/Game/LuaWebService/HandleSocialRequest.ashx?method=IsBestFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupUrl("http://tadah.rocks/Game/LuaWebService/HandleSocialRequest.ashx?method=IsInGroup&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRankUrl("http://tadah.rocks/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRank&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRoleUrl("http://tadah.rocks/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRole&playerid=%d&groupid=%d") end) + +if game.CoreGui.Version == 7 then starterScriptID = 839 end --2012 + +print("done") + +local result = pcall(function() game:GetService("ScriptContext"):AddStarterScript(starterScriptID) end) +if not result then + pcall(function() game:GetService("ScriptContext"):AddCoreScript(starterScriptID,game:GetService("ScriptContext"),"StarterScript") end) +end diff --git a/resources/views/client/xmlasset.blade.php b/resources/views/client/xmlasset.blade.php new file mode 100644 index 0000000..52e17ca --- /dev/null +++ b/resources/views/client/xmlasset.blade.php @@ -0,0 +1,54 @@ +@if ($item->type == "Face") + + null + nil + + + 5 + face + 20 + 0 + {{ url('/asset?id=' . $item->id) }} + true + + + +@elseif ($item->type == "T-Shirt") + + null + nil + + + {{ url('/asset?id=' . $item->id) }} + Shirt Graphic + true + + + +@elseif ($item->type == "Shirt") + + null + nil + + + {{ url('/asset?id=' . $item->id) }} + Shirt + true + + + +@elseif ($item->type == "Pants") + + null + nil + + + {{ url('/asset?id=' . $item->id) }} + Pants + true + + + +@else +Invalid asset. +@endif \ No newline at end of file diff --git a/resources/views/errors/401.blade.php b/resources/views/errors/401.blade.php new file mode 100644 index 0000000..5c586db --- /dev/null +++ b/resources/views/errors/401.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Unauthorized')) +@section('code', '401') +@section('message', __('Unauthorized')) diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php new file mode 100644 index 0000000..a825608 --- /dev/null +++ b/resources/views/errors/403.blade.php @@ -0,0 +1,24 @@ +@extends('layouts.app') + +@section('title') +Error +@endsection + +@section('content') +
+
+
+
+
Error
+ +
+

403

+
Access Denied
+

Looks like you shouldn't be here...

+

Main

+
+
+
+
+
+@endsection diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php new file mode 100644 index 0000000..c5d4934 --- /dev/null +++ b/resources/views/errors/404.blade.php @@ -0,0 +1,24 @@ +@extends('layouts.app') + +@section('title') +Error +@endsection + +@section('content') +
+
+
+
+
Error
+ +
+

404

+
Not Found
+

Whatever you are looking for isn't here. It might have gotten deleted or never existed in the first place.

+

Main

+
+
+
+
+
+@endsection diff --git a/resources/views/errors/419.blade.php b/resources/views/errors/419.blade.php new file mode 100644 index 0000000..c09216e --- /dev/null +++ b/resources/views/errors/419.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Page Expired')) +@section('code', '419') +@section('message', __('Page Expired')) diff --git a/resources/views/errors/429.blade.php b/resources/views/errors/429.blade.php new file mode 100644 index 0000000..f01b07b --- /dev/null +++ b/resources/views/errors/429.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Too Many Requests')) +@section('code', '429') +@section('message', __('Too Many Requests')) diff --git a/resources/views/errors/500.blade.php b/resources/views/errors/500.blade.php new file mode 100644 index 0000000..2e7e0e3 --- /dev/null +++ b/resources/views/errors/500.blade.php @@ -0,0 +1,24 @@ +@extends('layouts.app') + +@section('title') +Error +@endsection + +@section('content') +
+
+
+
+
Error
+ +
+

500

+
Internal Server Error
+

The website had a hard time processing this request. Try again later. If this persists, please contact the owners. They can be reached at tadahcommunity@gmail.com or on the help section of the forums.

+

Main

+
+
+
+
+
+@endsection diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php new file mode 100644 index 0000000..c5a9dde --- /dev/null +++ b/resources/views/errors/503.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Service Unavailable')) +@section('code', '503') +@section('message', __('Service Unavailable')) diff --git a/resources/views/errors/illustrated-layout.blade.php b/resources/views/errors/illustrated-layout.blade.php new file mode 100644 index 0000000..2e5b824 --- /dev/null +++ b/resources/views/errors/illustrated-layout.blade.php @@ -0,0 +1,486 @@ + + + + + + + @yield('title') + + + + + + + + + +
+
+
+
+ @yield('code', __('Oh no')) +
+ +
+ +

+ @yield('message') +

+ + + + +
+
+ +
+ @yield('image') +
+
+ + diff --git a/resources/views/errors/layout.blade.php b/resources/views/errors/layout.blade.php new file mode 100644 index 0000000..4f2318f --- /dev/null +++ b/resources/views/errors/layout.blade.php @@ -0,0 +1,57 @@ + + + + + + + @yield('title') + + + + + + + + + +
+
+
+ @yield('message') +
+
+
+ + diff --git a/resources/views/errors/minimal.blade.php b/resources/views/errors/minimal.blade.php new file mode 100644 index 0000000..ee16d44 --- /dev/null +++ b/resources/views/errors/minimal.blade.php @@ -0,0 +1,38 @@ + + + + + + + @yield('title') + + + + + + + + + + +
+
+
+
+ @yield('code') +
+ +
+ @yield('message') +
+
+
+
+ + diff --git a/resources/views/forum/category-old.blade.php b/resources/views/forum/category-old.blade.php new file mode 100644 index 0000000..e468849 --- /dev/null +++ b/resources/views/forum/category-old.blade.php @@ -0,0 +1,55 @@ +@extends('layouts.app') + +@section('title') +{{ $category->name }} +@endsection + +@section('content') +
+ @if (!$category->admin_only) + + @else + @if (Auth::user()->admin) + + @else +

You can't post here.

+ @endif + @endif + +
+ + + + + + + + + + @foreach ($posts as $post) + + + + + + + @endforeach + +
TitleAuthorRepliesLast Post
+ +
+

@if ($post->stickied) @endif @if ($post->locked) @endif {{ $post->title }}

+
+
+
{{ $post->user->username }}{{ $post->replies()->count() }}{{ $post->updated_at->diffForHumans() }}
+
+ +
+ {{ $posts->links('pagination::bootstrap-4') }} +
+
+@endsection diff --git a/resources/views/forum/category.blade.php b/resources/views/forum/category.blade.php new file mode 100644 index 0000000..7c51923 --- /dev/null +++ b/resources/views/forum/category.blade.php @@ -0,0 +1,113 @@ +@extends('layouts.app') + +@section('content') + + + + + + + +
+
+ + + + + + + + + +
+ +
+ + + + + + + + + + @if (!$category->admin_only) + + @else + @if (Auth::user()->admin) + + @endif + @endif + + + + + + + + +
+ + + + + + + + +
+ + {{ config('app.name') }} Forum + + + +  > + {{ $category->name }} + + + + +  
+ +
+
+   +
Search + this forum: + + +
+ + + + + + + + @foreach ($posts as $post) + + + + + + + + @endforeach + + + +
 Thread  Started By  Replies  Last Post 
{{ $post->title }} {{ $post->user->username }}{{ $post->replies->count() }}{{ $post->updated_at->diffForHumans() }}
 
+ + + + {{ $posts->links('pagination.simple') }} + +
+
+
+   +
+
+
   
+
+@endsection \ No newline at end of file diff --git a/resources/views/forum/editpost.blade.php b/resources/views/forum/editpost.blade.php new file mode 100644 index 0000000..234e950 --- /dev/null +++ b/resources/views/forum/editpost.blade.php @@ -0,0 +1,156 @@ +@extends('layouts.app') + +@section('content') + + + + + + + +
+
+ + + + + + + + + + +
      +
+ + + + + +
+ + + + + + + + +
+ + {{ config('app.name') }} Forum + + + +  > + {{ $post->category->name }} + + + + +  
+ +
+
+

+ + + + + + + + + +
+  Post a New Message +
+ + @if (session()->has('error')) + + + + @endif + + + + + + + + + + + @error('title') + + @enderror + + + + + + @error('body') + + @enderror + + + + +
{{ session()->get('error') }}
Author: {{ Auth::user()->username }} + +
Subject: {{ $message }}
Message: +  {{ $message }}
+ +
+
+

+

+ + + + +
+ + + + + + + + +
+ + {{ config('app.name') }} Forum + + + +  > + {{ $post->category->name }} + + + + +  
+ +
+
+

+
+
      
+
+
+ @csrf + + +
+@endsection + +@section('scripts') + +@endsection \ No newline at end of file diff --git a/resources/views/forum/editreply.blade.php b/resources/views/forum/editreply.blade.php new file mode 100644 index 0000000..30d5cd0 --- /dev/null +++ b/resources/views/forum/editreply.blade.php @@ -0,0 +1,148 @@ +@extends('layouts.app') + +@section('content') + + + + + + + +
+
+ + + + + + + + + + +
      +
+ + + + + +
+ + + + + + + + +
+ + {{ config('app.name') }} Forum + + + +  > + {{ $reply->category->name }} + + + + +  
+ +
+
+

+ + + + + + + + + +
+  Edit reply to an Existing Message +
+ + @if (session()->has('error')) + + + + @endif + + + + + + + + + + + + @error('body') + + @enderror + + + + +
{{ session()->get('error') }}
Author: {{ Auth::user()->username }} + +
Message: +  {{ $message }}
+ +
+
+

+

+ + + + +
+ + + + + + + + +
+ + {{ config('app.name') }} Forum + + + +  > + {{ $reply->category->name }} + + + + +  
+ +
+
+

+
+
      
+
+
+ @csrf + + +
+@endsection + +@section('scripts') + +@endsection \ No newline at end of file diff --git a/resources/views/forum/index-old.blade.php b/resources/views/forum/index-old.blade.php new file mode 100644 index 0000000..eeb0673 --- /dev/null +++ b/resources/views/forum/index-old.blade.php @@ -0,0 +1,38 @@ +@extends('layouts.app') + +@section('title') +Forum +@endsection + +@section('content') +
+
+ + + + + + + + + + @foreach ($categories as $category) + + + + + + + @endforeach + +
CategoryThreadsPostsLast Post
+ +
+

{{ $category->name }}

+

{{ $category->description }}

+
+
+
{{ $category->threads()->count() }}{{ $category->threads()->count() + $category->posts()->count() }}{{ $category->updated_at->diffForHumans() }}
+
+
+@endsection diff --git a/resources/views/forum/index.blade.php b/resources/views/forum/index.blade.php new file mode 100644 index 0000000..08ba4ce --- /dev/null +++ b/resources/views/forum/index.blade.php @@ -0,0 +1,94 @@ +@extends('layouts.app') + +@section('content') + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
    +

+ + +

+ + + + + + + + + +
+  Search Forums +
+ + + + + + + +
+ + + +
+ + +
+
+

+
    +     +
+ + + + + + + + + + + + @foreach ($categories as $category) + + + + + + + + @endforeach + +
Forum  Threads    Posts   Last Post 
{{ config('app.name') }}
{{ $category->name }}
{{ $category->description }}
{{ $category->threads()->count() }}{{ $category->threads()->count() + $category->posts()->count() }}{{ $category->updated_at->diffForHumans() }}
+

+
      
+
+@endsection \ No newline at end of file diff --git a/resources/views/forum/newpost.blade.php b/resources/views/forum/newpost.blade.php new file mode 100644 index 0000000..9dbd78a --- /dev/null +++ b/resources/views/forum/newpost.blade.php @@ -0,0 +1,164 @@ +@extends('layouts.app') + +@section('content') + + + + + + + +
+
+ + + + + + + + + + +
      +
+ + + + + +
+ + + + + + + + +
+ + {{ config('app.name') }} Forum + + + +  > + {{ $category->name }} + + + + +  
+ +
+
+

+ + + + + + + + + +
+  Post a New Message +
+ + @if (session()->has('error')) + + + + @endif + + + + + + + + + + + @error('title') + + @enderror + + + + + + @error('body') + + @enderror + + + + + + + + +
{{ session()->get('error') }}
Author: {{ Auth::user()->username }} + +
Subject: {{ $message }}
Message: +  {{ $message }}
  + +
+ +
+
+

+

+ + + + +
+ + + + + + + + +
+ + {{ config('app.name') }} Forum + + + +  > + {{ $category->name }} + + + + +  
+ +
+
+

+
+
      
+
+
+ @csrf + + + +
+@endsection + +@section('scripts') + +@endsection \ No newline at end of file diff --git a/resources/views/forum/newreply.blade.php b/resources/views/forum/newreply.blade.php new file mode 100644 index 0000000..4fabed9 --- /dev/null +++ b/resources/views/forum/newreply.blade.php @@ -0,0 +1,176 @@ +@extends('layouts.app') + +@section('content') + + + + + + + +
+
+ + + + + + + + + + +
      +
+ + + + + +
+ + + + + + + + +
+ + {{ config('app.name') }} Forum + + + +  > + {{ $post->category->name }} + + + + +  
+ +
+
+

+ + + + + + + + + + + + + + + + + +
+  Reply to an Existing Message +
+ + + + + + + + + + + + + + + + +
The message you are replying to:
Posted By: {{ $post->user->username }} on {{ date('F j, Y, g:i A', strtotime($post->created_at)) }}
Subject: {{ $post->title }}
Message: @parsedown($post->body) +
+
  +
+ + @if (session()->has('error')) + + + + @endif + + + + + + + + + + + + @error('body') + + @enderror + + + + +
{{ session()->get('error') }}
Author: {{ Auth::user()->username }} + +
Message: +  {{ $message }}
+ +
+
+

+

+ + + + +
+ + + + + + + + +
+ + {{ config('app.name') }} Forum + + + +  > + {{ $post->category->name }} + + + + +  
+ +
+
+

+
+
      
+
+
+ @csrf + + +
+@endsection + +@section('scripts') + +@endsection \ No newline at end of file diff --git a/resources/views/forum/post.blade.php b/resources/views/forum/post.blade.php new file mode 100644 index 0000000..862b4c6 --- /dev/null +++ b/resources/views/forum/post.blade.php @@ -0,0 +1,269 @@ +@extends('layouts.app') + +@section('content') + + + + + + + +
+
+ + + + + + + + + + +
      +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+ + {{ config('app.name') }} Forum + + + +  > + {{ $post->category->name }} + + + +  > + {{ $post->title }} + +  
+ +
+
  +
+ + + + + + + + + + + + + @foreach ($replies as $reply) + + + + + @endforeach +
+ + + + + +
Previous Thread :: Next Thread 
+
 Author Thread: {{ $post->title }}
+ + + + + + + + @if ($post->user->admin) + + + + @endif + + + + + + + + + + + + +
user->id)) src="/ForumC/skins/default/images/user_IsOnline.gif" @else src="/ForumC/skins/default/images/user_IsOffline.gif" @endif style="border-width:0px;" /> {{ $post->user->username }}
Forum Moderator
Joined: {{ date('m/d/Y', strtotime($post->user->joined)) }}
Total Posts: {{ $post->user->posts->count() + $post->user->threads->count() }}
 
+
+ + + + + + + + + + + + + +
+ + {{ $post->title }} + +
Posted: {{ date('m-d-Y g:i A', strtotime($post->created_at)) }} ({{ $post->created_at->diffForHumans() }}) +
@parsedown($post->body)
+ @if (!$post->locked) + + @endif + @if (Auth::user()->admin) + + @endif +
+
+ + + + + + + + @if ($reply->user->admin) + + + + @endif + + + + + + + + + + + + +
user->id)) src="/ForumC/skins/default/images/user_IsOnline.gif" @else src="/ForumC/skins/default/images/user_IsOffline.gif" @endif style="border-width:0px;" /> {{ $reply->user->username }}
Forum Moderator
Joined: {{ date('m/d/Y', strtotime($reply->user->joined)) }}
Total posts: {{ $reply->user->posts->count() + $reply->user->threads->count() }}
 
+
+ + + + + + + + + + + + + + + +
+ + Re: {{ $post->title }} + +
Posted: {{ date('F j, Y, g:i A', strtotime($reply->created_at)) }} ({{ $reply->created_at->diffForHumans() }}) +
@parsedown($reply->body)
+ @if (!$post->locked) + + @endif + @if (Auth::user()->admin) +
+ +
+ @csrf + + +
+
+ @endif +
+
+ + + + + +
{{ $replies->links('pagination.simple') }}
+
+
 
+
+ + + + + + + + +
+ + {{ config('app.name') }} Forum + + + +  > + {{ $post->category->name }} + + + +  > + {{ $post->title }} + +  
+ +
+
+
+
      
+
+@endsection \ No newline at end of file diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php new file mode 100644 index 0000000..5a1102d --- /dev/null +++ b/resources/views/home.blade.php @@ -0,0 +1,138 @@ +@extends('layouts.app') + +@section('content') + + + +
+ +
+ +
+ Hi, {{ Auth::user()->username }} +
+
+
+ {{ Auth::user()->username }} +
+ +
+
+
+
+
+
+ 0 +
+
+
+
+ 0 +
+ +
+
+
+ 0 +
+
+
+
+
+
+
+
+ +
+
+ + Current Status + +
+
+ + Right now I'm: +
+ +
+    +

+
+
+
+ + My Feed + +
+
+
+ +
+
+ There is no Feed yet. This'll be added later. +
+
+
+
+
+
+
+@endsection \ No newline at end of file diff --git a/resources/views/layouts/app-old.blade.php b/resources/views/layouts/app-old.blade.php new file mode 100644 index 0000000..f3ade76 --- /dev/null +++ b/resources/views/layouts/app-old.blade.php @@ -0,0 +1,132 @@ + + + + + + + + + + @yield('title') - {{ config('app.name') }} + + @yield('meta') + + + + + + + + + + + + + + + + + + +
+ + +
+ @yield('content') +
+ + +
+ @yield('scripts') + + diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php new file mode 100644 index 0000000..bb3fc2e --- /dev/null +++ b/resources/views/layouts/app.blade.php @@ -0,0 +1,294 @@ + + + + + + + + {{ config('app.name') }} + + + + + + + + + + + + + +
+ + + + + + +
+
+ +
+
+ +
+
+
+
+
+
+
Tadah Eleven is not finished at the moment. Please hang tight as development continues!
+
+
+
+
+ @yield('content') +
+ +
+ @yield('scripts') +
@csrf
+
+ + diff --git a/resources/views/pagination/simple.blade.php b/resources/views/pagination/simple.blade.php new file mode 100644 index 0000000..a6aa9ac --- /dev/null +++ b/resources/views/pagination/simple.blade.php @@ -0,0 +1,19 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/servers/configure.blade.php b/resources/views/servers/configure.blade.php new file mode 100644 index 0000000..5479826 --- /dev/null +++ b/resources/views/servers/configure.blade.php @@ -0,0 +1,81 @@ +@extends('layouts.app') + +@section('title') +Configure Server +@endsection + +@section('content') +
+
+
+
+
{{ __('Configure Server') }}
+ +
+
+ @csrf + +
+ + +
+ + + @error('name') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ + + @error('description') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ + + @error('ipaddress') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+
+@endsection diff --git a/resources/views/servers/create.blade.php b/resources/views/servers/create.blade.php new file mode 100644 index 0000000..f6fdb0e --- /dev/null +++ b/resources/views/servers/create.blade.php @@ -0,0 +1,86 @@ +@extends('layouts.app') + +@section('title') +Create Server +@endsection + +@section('content') +
+
+
+
+
{{ __('Create Server') }}
+ +
+ @if (config('app.server_creation_enabled')) +
+ @csrf + +
+ + +
+ + + @error('name') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ + + @error('description') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ + + @error('ipaddress') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ +
+
+ +
+
+ +
+
+
+ @else +

Server creation disabled

+

Sorry, server creation has been disabled. Check back later.

+ @endif +
+
+
+
+
+@endsection diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php new file mode 100644 index 0000000..18cb259 --- /dev/null +++ b/resources/views/servers/index.blade.php @@ -0,0 +1,265 @@ +@inject('user', 'App\Http\Controllers\UsersController') + +@extends('layouts.app') + +@section('content') + +
+
+ Games + +
+ + +
+
+
+ + + + +
+
+ +
+
+
+
+ +
+ @foreach ($servers as $server) +
+
+
+ + +
+ 0 players online +
+ +
+ +
+
+ @endforeach +
+
+ + 1 of +
+
+
+
+ +
+
+
+
+@endsection \ No newline at end of file diff --git a/resources/views/servers/server.blade.php b/resources/views/servers/server.blade.php new file mode 100644 index 0000000..0740073 --- /dev/null +++ b/resources/views/servers/server.blade.php @@ -0,0 +1,251 @@ +@inject('user', 'App\Http\Controllers\UsersController') + +@extends('layouts.app') + +@section('content') + +
+
+ + +

+ {{ $server->name }} +

+
+
+
+
+
+
+ {{ $server->name }} +
+
+ Favorite +
+
+
+ + + + + + + + Copy Protection: CopyLocked + + Gear Not Allowed +
+
+ + + +
+
+
+ +
+
+
+
+
+
+ +
+

+ {{ config('app.name') }} Place +

+
+ +
+
+ +
+
+ {{ $server->user->username }} +
+ Creator: + {{ $server->user->username }} +
+
+
+ Created: + {{ $server->created_at->diffForHumans() }} +
+
+ Updated: + {{ $server->updated_at->diffForHumans() }} +
+
+ Favorited: + 0 times +
+
+ Visited: + 0 times +
+
+
+
+ Report Abuse + Report Abuse +
+
+
+
+
+
+
+
+
+ + + + + +
+
+
+
+
+
Create A Set
+
+
+

+ Name: + +

+
+ +
+ +

Description:

+ +

Image:

+ +
+ + +
+
+
+ + +
+
+
+@endsection \ No newline at end of file diff --git a/resources/views/terms/credits.blade.php b/resources/views/terms/credits.blade.php new file mode 100644 index 0000000..20128a7 --- /dev/null +++ b/resources/views/terms/credits.blade.php @@ -0,0 +1,30 @@ +@extends('layouts.app') + +@section('title') +Contributors +@endsection + +@section('content') +
+
+
+
+
Credits
+
+

{{ config('app.name') }} Contributors

+
    +
  • kinery - Created Tadah
  • +
  • Anonymous - Making our thumbnails possible and giving me tips on the client.
  • +
  • Shambler - Ideas guy, helped found Tadah and give me motivation to create.
  • +
  • Carrot - Made the server page less ugly and some more client tips.
  • +
  • Anonymous - Cleaning up my code and hacking the GitHub repository, helped properly style the catalog page.
  • +
  • spike - Artist, made the Dahllor icon we use today.
  • +
  • kaykayko - existing
  • +
+

Without these people lending out their help Tadah would not be as good as it is today. Thanks, everyone.

+
+
+
+
+
+@endsection diff --git a/resources/views/terms/rules.blade.php b/resources/views/terms/rules.blade.php new file mode 100644 index 0000000..71d160c --- /dev/null +++ b/resources/views/terms/rules.blade.php @@ -0,0 +1,48 @@ +@extends('layouts.app') + +@section('title') +Rules +@endsection + +@section('content') +
+
+
+
+
Rules & Privacy
+
+

Rules and Terms

+

The rules here apply to the website, and objects that appear on the website. For example, server names, server descriptions, user-created assets, user-created asset names and descriptions, user biographies, everything like that.

+

We offer leniency for content that appears on all users' servers, and things that go on in users' servers. We are not responsible for what occurs within a server, such as chats, nor content that is downloaded and/or displayed from a server. Chat is not logged (and will never be logged by {{ config('app.name') }}).

+

Content that is not provided by {{ config('app.name') }} from a third party that is used within servers do not need to follow these rules, with exceptions being that you may not host any servers that contain any child abuse content or gore. Anything illegal will be reported to the authorities, and you will be permanently removed from {{ config('app.name') }}.

+ +
    +
  • No pornographic content uploaded to the website.
  • +
  • No content depicting child abuse of any sort. This includes all content within servers.
  • +
  • No content that depicts heavy gore. This includes all content within servers.
  • +
  • This is a game. Respect everyone.
  • +
  • Our moderators have the right to remove anyone at any time for any reason.
  • +
  • Server hosts are the sole people responsible for what occurs within their servers, except if there was an exploiter/hacker/cheater present.
  • +
+
+
+

Privacy

+

In the event that there is ever a breach of data, all users will be notified via the website and our community Discord server. We will create a page that tells you the date of the breach and what data was stolen. Below is data that we store in our database that identifies you:

+ +
    +
  • Your email
  • +
  • Your password (hashed, never plain text)
  • +
  • Your IP address (register IP address and last used IP address)
  • +
  • Invite key used to register
  • +
+
+

If you want your data removed from {{ config('app.name') }}, contact us by email.

+
+

Contact Us

+

You may contact us via our email.

+
+
+
+
+
+@endsection diff --git a/resources/views/users/banned.blade.php b/resources/views/users/banned.blade.php new file mode 100644 index 0000000..22ba9f1 --- /dev/null +++ b/resources/views/users/banned.blade.php @@ -0,0 +1,27 @@ +@extends('layouts.app') + +@section('title') +Banned +@endsection + +@section('content') +
+ @if (Auth::user()->banned) +

Banned

+
+

You've been banned from {{ config('app.name') }}.

+

Reason: {{ Auth::user()->ban_reason }}

+

Banned until {{ date('m/d/Y', strtotime(Auth::user()->banned_until)) }}.

+ @if (Auth::user()->banned_until->isPast()) +
+ @csrf + + +
+ @endif + @else +

Hey!

+

You're not banned, and you shouldn't be here!

+ @endif +
+@endsection diff --git a/resources/views/users/bodycolors.blade.php b/resources/views/users/bodycolors.blade.php new file mode 100644 index 0000000..1880559 --- /dev/null +++ b/resources/views/users/bodycolors.blade.php @@ -0,0 +1,16 @@ + + null + nil + + + {{ $bodycolors->head_color }} + {{ $bodycolors->left_arm_color }} + {{ $bodycolors->left_leg_color }} + Body Colors + {{ $bodycolors->right_arm_color }} + {{ $bodycolors->right_leg_color }} + {{ $bodycolors->torso_color }} + true + + + \ No newline at end of file diff --git a/resources/views/users/character.blade.php b/resources/views/users/character.blade.php new file mode 100644 index 0000000..e69de29 diff --git a/resources/views/users/charactercolors.blade.php b/resources/views/users/charactercolors.blade.php new file mode 100644 index 0000000..410ff91 --- /dev/null +++ b/resources/views/users/charactercolors.blade.php @@ -0,0 +1,217 @@ +@extends('layouts.app') + +@section('title') +Character +@endsection + +@section('meta') + + + + + + +@endsection + +@section('content') + + + + +
+
+
+
+
Character
+
+ + Character image +
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+@endsection + +@section('scripts') + +@endsection \ No newline at end of file diff --git a/resources/views/users/characteritems.blade.php b/resources/views/users/characteritems.blade.php new file mode 100644 index 0000000..a8a6c58 --- /dev/null +++ b/resources/views/users/characteritems.blade.php @@ -0,0 +1,105 @@ +@extends('layouts.app') + +@section('title') +Character +@endsection + +@section('meta') + + + + + + +@endsection + +@section('content') +
+
+
+
+
Character
+
+ + Character image +
+
+
+
+
+ +
+ @if ($items->count() > 0) +
+ @foreach ($items->all() as $item) +
+
+ {{ $item->name }} thumbnail +
+ +
+ @csrf + +
+
+
+
+ @endforeach +
+ @else +
+

Nothing found

+

You don't own any items in this category.

+
+ @endif +
+
+
+
+
+@endsection + +@section('scripts') + +@endsection \ No newline at end of file diff --git a/resources/views/users/index-old.blade.php b/resources/views/users/index-old.blade.php new file mode 100644 index 0000000..cf7666a --- /dev/null +++ b/resources/views/users/index-old.blade.php @@ -0,0 +1,61 @@ +@extends('layouts.app') + +@section('title') +Users +@endsection + +@section('meta') + + + + + + +@endsection + +@section('content') +
+
+
+ + +
+
+ + @if ($users->count() > 0) + + + + + + + + + + @foreach ($users as $user) + + + + @if (Cache::has('last_online' . $user->id)) + + @else + + @endif + + + + @endforeach + +
CharacterNameOnlineBlurbLast Online
{{ $user->username }}admin) class="text-danger" @endif href="{{ route('users.profile', $user->id) }}">{{ $user->username }}Online OnlineOffline Offline{{ $user->blurb }}{{ $user->last_online->diffForHumans() }}
+ @else +
+

Nothing found

+

Looks like there are no users to display for this query.

+
+ @endif + +
+ {{ $users->links('pagination::bootstrap-4') }} +
+
+@endsection diff --git a/resources/views/users/index.blade.php b/resources/views/users/index.blade.php new file mode 100644 index 0000000..f855057 --- /dev/null +++ b/resources/views/users/index.blade.php @@ -0,0 +1,82 @@ +@extends('layouts.app') + +@section('content') + +
+
+
+ + + + + +
+ Search: + + + + + + + + +
+
+
+ +
+
+ + + + + + + + + @foreach ($users as $user) + + + + + + + + @endforeach +
Avatar NameBlurbLast Seen
+ {{ $user->username }} + + + id)) src="images/online.png" @else src="images/offline.png" @endif style="border-width:0px;" /> + + {{ $user->username }} + +
+ {{ $user->blurb }} +
+
+ {{ $user->last_online->diffForHumans() }} +
+
+
{{ $users->links('pagination.simple') }}
+
+
+
+
+@endsection + +@section('scripts') + +@endsection \ No newline at end of file diff --git a/resources/views/users/profile.blade.php b/resources/views/users/profile.blade.php new file mode 100644 index 0000000..f80deab --- /dev/null +++ b/resources/views/users/profile.blade.php @@ -0,0 +1,58 @@ +@extends('layouts.app') + +@section('title') +{{ $user->username }}'s Profile +@endsection + +@section('meta') + + + + + + +@endsection + +@section('content') +
+ @if ($user->banned) + + @endif +
+
+
+
{{ $user->username }}
+
+ @if (Cache::has('last_online' . $user->id)) +

[ Online ]

+ @else +

[ Offline ]

+ @endif +

{{ $user->username }}

+
{{ $user->blurb }}
+
+ Joined: {{ date('m/d/Y', strtotime($user->joined)) }} +
+
+
+
+
+
Servers
+
+ @if ($servers->count() > 0 ) + @foreach ($servers as $server) + + @endforeach + @else + This user has no servers. + @endif +
+
+
+
+
+@endsection \ No newline at end of file diff --git a/resources/views/users/settings.blade.php b/resources/views/users/settings.blade.php new file mode 100644 index 0000000..91bc1a7 --- /dev/null +++ b/resources/views/users/settings.blade.php @@ -0,0 +1,55 @@ +@extends('layouts.app') + +@section('title') +Settings +@endsection + +@section('content') +
+
+
+
+
User Settings
+
+ @if (session()->has('error')) +
+ {{ session()->get('error') }} +
+ @endif + @if (session()->has('message')) +
+ {{ session()->get('message') }} +
+ @endif +

Username: {{ Auth::user()->username }}
Email: {{ Auth::user()->email }}

+
+
+ @csrf + +
+ + + + @error('blurb') + + {{ $message }} + + @enderror +
+ +
+ +
+
+
+
+
+
+
+@endsection + +@section('scripts') + +@endsection \ No newline at end of file diff --git a/resources/views/users/user.blade.php b/resources/views/users/user.blade.php new file mode 100644 index 0000000..4e1778c --- /dev/null +++ b/resources/views/users/user.blade.php @@ -0,0 +1,503 @@ +@extends('layouts.app') + +@section('content') + + +
+
+ Hi, {{ Auth::user()->username }} +
+
+ + Right now I'm: +    + "not yet"   + > Update My Status + +
+
+ +
+
+ Your Profile +
+
+
+
+
+
+ + {{ Auth::user()->username }} +
+ +
+
+
+
+
+
+ 0 +
+
+
+
+ 0 +
+ +
+
+
+ 0 +
+
+
+
+
+
+
+
+
+
+
+ {{ config('app.name') }} Badges +
+
+ + + +

You have no Badges. This feature will come later.

+ +
+
+ +
Statistics
+
+ + + + + + + + + +
+ Friends: + + 0 +
Forum Posts:{{ Auth::user()->threads->count() + Auth::user()->posts->count() }}
+
+
+ +
+
+ Active Places +
+
+
+
+
+ + @foreach ($servers as $server) + +
+ {{ $server->name }} +
+
+ @endforeach +
+
+
+
+
My Friends (Edit)
+
+ + + +

You have no Friends. This feature will come later.

+ +
+
+
+
+
+ +
+
+
+
+
+
+ Stuff +
+
+
+
+ Heads +
+
+ Faces +
+
+ Gear +
+
+ Hats +
+
+ T-Shirts +
+
+ Shirts +
+
+ Pants +
+
+ Decals +
+
+ Models +
+
+ Places +
+
+ Badges +
+
+ Left Arms +
+ +
+ Left Legs +
+ +
+ Torsos +
+
+ Packages +
+
+
+
+ Shop    +
+ + + + + + + + +
+
+ +
+ Warmest Winter Cap +
+
+ +
+ Creator: + ROBLOX +
+
+ + Tx: 10 +
+
+
+
+
+ +
+ ROBLOX Visor +
+
+ +
+ Creator: + ROBLOX +
+
+ + Tx: 10 +
+
+
+
+
+ +
+ Fancy Sailor +
+
+ +
+ Creator: + ROBLOX +
+
+ + Tx: 10 +
+
+
+
+
+
Recommendations
+
+
Here are some other Hats that we think you might like.
+ + + + + + + + + + + +
+
+
+ Queen's Guard Hat +
+
+ +
+ Creator: ROBLOX +
+
+
+
+
+
+ Beautiful Hair for Beautiful People +
+ +
+
+
+
+ Chef Hat +
+
+
+ Chef Hat +
+
+ Creator: ROBLOX +
+
+
+
+
+
+ Ninja Mask of Shadows +
+
+ +
+ Creator: ROBLOX +
+
+
+
+
+
+ Paper Bag +
+
+
+ Paper Bag +
+
+ Creator: ROBLOX +
+
+
+
+
+
+ Rubber Duckie +
+
+ +
+ Creator: ROBLOX +
+
+
+
+
+
+
+
+
+
+ +
+
+
+@endsection diff --git a/resources/views/vendor/mail/html/button.blade.php b/resources/views/vendor/mail/html/button.blade.php new file mode 100644 index 0000000..e74fe55 --- /dev/null +++ b/resources/views/vendor/mail/html/button.blade.php @@ -0,0 +1,19 @@ + + + + + diff --git a/resources/views/vendor/mail/html/footer.blade.php b/resources/views/vendor/mail/html/footer.blade.php new file mode 100644 index 0000000..3ff41f8 --- /dev/null +++ b/resources/views/vendor/mail/html/footer.blade.php @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/resources/views/vendor/mail/html/header.blade.php b/resources/views/vendor/mail/html/header.blade.php new file mode 100644 index 0000000..fa1875c --- /dev/null +++ b/resources/views/vendor/mail/html/header.blade.php @@ -0,0 +1,11 @@ + + + +@if (trim($slot) === 'Laravel') + +@else +{{ $slot }} +@endif + + + diff --git a/resources/views/vendor/mail/html/layout.blade.php b/resources/views/vendor/mail/html/layout.blade.php new file mode 100644 index 0000000..21d349b --- /dev/null +++ b/resources/views/vendor/mail/html/layout.blade.php @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + diff --git a/resources/views/vendor/mail/html/message.blade.php b/resources/views/vendor/mail/html/message.blade.php new file mode 100644 index 0000000..deec4a1 --- /dev/null +++ b/resources/views/vendor/mail/html/message.blade.php @@ -0,0 +1,27 @@ +@component('mail::layout') +{{-- Header --}} +@slot('header') +@component('mail::header', ['url' => config('app.url')]) +{{ config('app.name') }} +@endcomponent +@endslot + +{{-- Body --}} +{{ $slot }} + +{{-- Subcopy --}} +@isset($subcopy) +@slot('subcopy') +@component('mail::subcopy') +{{ $subcopy }} +@endcomponent +@endslot +@endisset + +{{-- Footer --}} +@slot('footer') +@component('mail::footer') +© {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') +@endcomponent +@endslot +@endcomponent diff --git a/resources/views/vendor/mail/html/panel.blade.php b/resources/views/vendor/mail/html/panel.blade.php new file mode 100644 index 0000000..2975a60 --- /dev/null +++ b/resources/views/vendor/mail/html/panel.blade.php @@ -0,0 +1,14 @@ + + + + + + diff --git a/resources/views/vendor/mail/html/subcopy.blade.php b/resources/views/vendor/mail/html/subcopy.blade.php new file mode 100644 index 0000000..790ce6c --- /dev/null +++ b/resources/views/vendor/mail/html/subcopy.blade.php @@ -0,0 +1,7 @@ + + + + + diff --git a/resources/views/vendor/mail/html/table.blade.php b/resources/views/vendor/mail/html/table.blade.php new file mode 100644 index 0000000..a5f3348 --- /dev/null +++ b/resources/views/vendor/mail/html/table.blade.php @@ -0,0 +1,3 @@ +
+{{ Illuminate\Mail\Markdown::parse($slot) }} +
diff --git a/resources/views/vendor/mail/html/themes/default.css b/resources/views/vendor/mail/html/themes/default.css new file mode 100644 index 0000000..2483b11 --- /dev/null +++ b/resources/views/vendor/mail/html/themes/default.css @@ -0,0 +1,290 @@ +/* Base */ + +body, +body *:not(html):not(style):not(br):not(tr):not(code) { + box-sizing: border-box; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, + 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + position: relative; +} + +body { + -webkit-text-size-adjust: none; + background-color: #ffffff; + color: #718096; + height: 100%; + line-height: 1.4; + margin: 0; + padding: 0; + width: 100% !important; +} + +p, +ul, +ol, +blockquote { + line-height: 1.4; + text-align: left; +} + +a { + color: #3869d4; +} + +a img { + border: none; +} + +/* Typography */ + +h1 { + color: #3d4852; + font-size: 18px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +h2 { + font-size: 16px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +h3 { + font-size: 14px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +p { + font-size: 16px; + line-height: 1.5em; + margin-top: 0; + text-align: left; +} + +p.sub { + font-size: 12px; +} + +img { + max-width: 100%; +} + +/* Layout */ + +.wrapper { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + background-color: #edf2f7; + margin: 0; + padding: 0; + width: 100%; +} + +.content { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + margin: 0; + padding: 0; + width: 100%; +} + +/* Header */ + +.header { + padding: 25px 0; + text-align: center; +} + +.header a { + color: #3d4852; + font-size: 19px; + font-weight: bold; + text-decoration: none; +} + +/* Logo */ + +.logo { + height: 75px; + max-height: 75px; + width: 75px; +} + +/* Body */ + +.body { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + background-color: #edf2f7; + border-bottom: 1px solid #edf2f7; + border-top: 1px solid #edf2f7; + margin: 0; + padding: 0; + width: 100%; +} + +.inner-body { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 570px; + background-color: #ffffff; + border-color: #e8e5ef; + border-radius: 2px; + border-width: 1px; + box-shadow: 0 2px 0 rgba(0, 0, 150, 0.025), 2px 4px 0 rgba(0, 0, 150, 0.015); + margin: 0 auto; + padding: 0; + width: 570px; +} + +/* Subcopy */ + +.subcopy { + border-top: 1px solid #e8e5ef; + margin-top: 25px; + padding-top: 25px; +} + +.subcopy p { + font-size: 14px; +} + +/* Footer */ + +.footer { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 570px; + margin: 0 auto; + padding: 0; + text-align: center; + width: 570px; +} + +.footer p { + color: #b0adc5; + font-size: 12px; + text-align: center; +} + +.footer a { + color: #b0adc5; + text-decoration: underline; +} + +/* Tables */ + +.table table { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + margin: 30px auto; + width: 100%; +} + +.table th { + border-bottom: 1px solid #edeff2; + margin: 0; + padding-bottom: 8px; +} + +.table td { + color: #74787e; + font-size: 15px; + line-height: 18px; + margin: 0; + padding: 10px 0; +} + +.content-cell { + max-width: 100vw; + padding: 32px; +} + +/* Buttons */ + +.action { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + margin: 30px auto; + padding: 0; + text-align: center; + width: 100%; +} + +.button { + -webkit-text-size-adjust: none; + border-radius: 4px; + color: #fff; + display: inline-block; + overflow: hidden; + text-decoration: none; +} + +.button-blue, +.button-primary { + background-color: #2d3748; + border-bottom: 8px solid #2d3748; + border-left: 18px solid #2d3748; + border-right: 18px solid #2d3748; + border-top: 8px solid #2d3748; +} + +.button-green, +.button-success { + background-color: #48bb78; + border-bottom: 8px solid #48bb78; + border-left: 18px solid #48bb78; + border-right: 18px solid #48bb78; + border-top: 8px solid #48bb78; +} + +.button-red, +.button-error { + background-color: #e53e3e; + border-bottom: 8px solid #e53e3e; + border-left: 18px solid #e53e3e; + border-right: 18px solid #e53e3e; + border-top: 8px solid #e53e3e; +} + +/* Panels */ + +.panel { + border-left: #2d3748 solid 4px; + margin: 21px 0; +} + +.panel-content { + background-color: #edf2f7; + color: #718096; + padding: 16px; +} + +.panel-content p { + color: #718096; +} + +.panel-item { + padding: 0; +} + +.panel-item p:last-of-type { + margin-bottom: 0; + padding-bottom: 0; +} + +/* Utilities */ + +.break-all { + word-break: break-all; +} diff --git a/resources/views/vendor/mail/text/button.blade.php b/resources/views/vendor/mail/text/button.blade.php new file mode 100644 index 0000000..97444eb --- /dev/null +++ b/resources/views/vendor/mail/text/button.blade.php @@ -0,0 +1 @@ +{{ $slot }}: {{ $url }} diff --git a/resources/views/vendor/mail/text/footer.blade.php b/resources/views/vendor/mail/text/footer.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/footer.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/header.blade.php b/resources/views/vendor/mail/text/header.blade.php new file mode 100644 index 0000000..aaa3e57 --- /dev/null +++ b/resources/views/vendor/mail/text/header.blade.php @@ -0,0 +1 @@ +[{{ $slot }}]({{ $url }}) diff --git a/resources/views/vendor/mail/text/layout.blade.php b/resources/views/vendor/mail/text/layout.blade.php new file mode 100644 index 0000000..9378baa --- /dev/null +++ b/resources/views/vendor/mail/text/layout.blade.php @@ -0,0 +1,9 @@ +{!! strip_tags($header) !!} + +{!! strip_tags($slot) !!} +@isset($subcopy) + +{!! strip_tags($subcopy) !!} +@endisset + +{!! strip_tags($footer) !!} diff --git a/resources/views/vendor/mail/text/message.blade.php b/resources/views/vendor/mail/text/message.blade.php new file mode 100644 index 0000000..1ae9ed8 --- /dev/null +++ b/resources/views/vendor/mail/text/message.blade.php @@ -0,0 +1,27 @@ +@component('mail::layout') + {{-- Header --}} + @slot('header') + @component('mail::header', ['url' => config('app.url')]) + {{ config('app.name') }} + @endcomponent + @endslot + + {{-- Body --}} + {{ $slot }} + + {{-- Subcopy --}} + @isset($subcopy) + @slot('subcopy') + @component('mail::subcopy') + {{ $subcopy }} + @endcomponent + @endslot + @endisset + + {{-- Footer --}} + @slot('footer') + @component('mail::footer') + © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') + @endcomponent + @endslot +@endcomponent diff --git a/resources/views/vendor/mail/text/panel.blade.php b/resources/views/vendor/mail/text/panel.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/panel.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/subcopy.blade.php b/resources/views/vendor/mail/text/subcopy.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/subcopy.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/table.blade.php b/resources/views/vendor/mail/text/table.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/table.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/notifications/email.blade.php b/resources/views/vendor/notifications/email.blade.php new file mode 100644 index 0000000..e7a56b4 --- /dev/null +++ b/resources/views/vendor/notifications/email.blade.php @@ -0,0 +1,62 @@ +@component('mail::message') +{{-- Greeting --}} +@if (! empty($greeting)) +# {{ $greeting }} +@else +@if ($level === 'error') +# @lang('Whoops!') +@else +# @lang('Hello!') +@endif +@endif + +{{-- Intro Lines --}} +@foreach ($introLines as $line) +{{ $line }} + +@endforeach + +{{-- Action Button --}} +@isset($actionText) + +@component('mail::button', ['url' => $actionUrl, 'color' => $color]) +{{ $actionText }} +@endcomponent +@endisset + +{{-- Outro Lines --}} +@foreach ($outroLines as $line) +{{ $line }} + +@endforeach + +{{-- Salutation --}} +@if (! empty($salutation)) +{{ $salutation }} +@else +@lang('Regards'),
+{{ config('app.name') }} +@endif + +{{-- Subcopy --}} +@isset($actionText) +@slot('subcopy') +@lang( + "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\n". + 'into your web browser:', + [ + 'actionText' => $actionText, + ] +) [{{ $displayableActionUrl }}]({{ $actionUrl }}) +@endslot +@endisset +@endcomponent diff --git a/resources/views/vendor/pagination/bootstrap-4.blade.php b/resources/views/vendor/pagination/bootstrap-4.blade.php new file mode 100644 index 0000000..63c6f56 --- /dev/null +++ b/resources/views/vendor/pagination/bootstrap-4.blade.php @@ -0,0 +1,46 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/default.blade.php b/resources/views/vendor/pagination/default.blade.php new file mode 100644 index 0000000..0db70b5 --- /dev/null +++ b/resources/views/vendor/pagination/default.blade.php @@ -0,0 +1,46 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/semantic-ui.blade.php b/resources/views/vendor/pagination/semantic-ui.blade.php new file mode 100644 index 0000000..ef0dbb1 --- /dev/null +++ b/resources/views/vendor/pagination/semantic-ui.blade.php @@ -0,0 +1,36 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-bootstrap-4.blade.php b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php new file mode 100644 index 0000000..4bb4917 --- /dev/null +++ b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php @@ -0,0 +1,27 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-default.blade.php b/resources/views/vendor/pagination/simple-default.blade.php new file mode 100644 index 0000000..36bdbc1 --- /dev/null +++ b/resources/views/vendor/pagination/simple-default.blade.php @@ -0,0 +1,19 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-tailwind.blade.php b/resources/views/vendor/pagination/simple-tailwind.blade.php new file mode 100644 index 0000000..6872cca --- /dev/null +++ b/resources/views/vendor/pagination/simple-tailwind.blade.php @@ -0,0 +1,25 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/tailwind.blade.php b/resources/views/vendor/pagination/tailwind.blade.php new file mode 100644 index 0000000..2dd4d0e --- /dev/null +++ b/resources/views/vendor/pagination/tailwind.blade.php @@ -0,0 +1,102 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/welcome-old.blade.php b/resources/views/welcome-old.blade.php new file mode 100644 index 0000000..b0156d4 --- /dev/null +++ b/resources/views/welcome-old.blade.php @@ -0,0 +1,31 @@ +@extends('layouts.app') + +@section('title') +Welcome +@endsection + +@section('meta') + + + + + + +@endsection + +@section('content') +
+
+ @if (session('status')) + + @endif +

+

+

{{ config('app.quotes')[array_rand(config('app.quotes'))] }}

+
+

{{ config('app.name') }} is meant to be a tight-knit community of like-minded people. Our community is closed, so you'll have to know somebody already inside to get invited.
{{ config('app.name') }} is entirely non-profit! The owners of the site make no money from hosting {{ config('app.name') }}.
Check out the people that helped to make Tadah what it is today.

+
+
+@endsection diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php new file mode 100644 index 0000000..b0919c6 --- /dev/null +++ b/resources/views/welcome.blade.php @@ -0,0 +1,482 @@ +@extends('layouts.app') + +@section('content') + + +
+ + +
+
+
+
+ +
+ @if (!Auth::user()) +
+ Member Login +
+
+ +
+
+
+ + +
+
+
+
+ + +
+
+ Login +
+
+ Register +
+ + +
+ @else +
+ Logged In +
+
+ {{ Auth::user()->name }} +
+ @endif +
+
+ +
+
+ + + + + + + +
+
+
+ Play Roblox +
+ + + +
+
+
+
+ + +
+
+
+
Not Affiliated with Roblox
+
+
+
{{ config('app.name') }} IS NOT affiliated with Roblox Corporation, K'Nex, The LEGO Group, or MEGA Brands.
+
+
+
+
+
+
{{ config('app.name') }} Stats
+
+
+
+
+ + + +
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
+
+
{{ config('app.name') }} News
+
+
+
+
+
+
+ @foreach ($announcements as $announcement) + + @endforeach +
+
+ More... +
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+
+
+
Featured Free Game: Placeholder Game
+
+
+
+
+
+
+ Placeholder Game - a {{ config('app.name') }} free game +
+
+
+
+
Updated:
+
Never
+
Favorited:
+
0 times
+
Visited:
+
0 times
+
+
+ Placeholder +
+
+ +
+
+
+
+
+
+
+
+
+ @csrf + + +
+ + + +
+ + + + + + + + + + + + + + +@endsection diff --git a/routes/api.php b/routes/api.php new file mode 100644 index 0000000..450535f --- /dev/null +++ b/routes/api.php @@ -0,0 +1,17 @@ +id === (int) $id; +}); diff --git a/routes/console.php b/routes/console.php new file mode 100644 index 0000000..e05f4c9 --- /dev/null +++ b/routes/console.php @@ -0,0 +1,19 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote'); diff --git a/routes/web.php b/routes/web.php new file mode 100644 index 0000000..999d346 --- /dev/null +++ b/routes/web.php @@ -0,0 +1,137 @@ +name('welcome'); + +// Authentication routes +Auth::routes(); + +// Home +Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); + +// Rules +Route::get('/rules', function () { + return view('terms.rules'); +}); + +Route::get('/credits', function () { + return view('terms.credits'); +}); + +// Users routes +Route::get('/settings', [App\Http\Controllers\UsersController::class, 'settings'])->name('users.settings'); +Route::post('/settings', [App\Http\Controllers\UsersController::class, 'savesettings'])->name('users.savesettings'); +Route::get('/users', [App\Http\Controllers\UsersController::class, 'index'])->name('users.index'); +Route::get('/user', [App\Http\Controllers\UsersController::class, 'me'])->name('users.me'); +Route::get('/users/{id}/thumbnail', [App\Http\Controllers\UsersController::class, 'getthumbnail'])->name('users.thumbnail'); +Route::get('/users/{id}/profile', [App\Http\Controllers\UsersController::class, 'profile'])->name('users.profile'); +Route::get('/banned', [App\Http\Controllers\UsersController::class, 'banned'])->name('users.banned'); + +// Catalog routes +Route::get('/catalog/upload', [App\Http\Controllers\CatalogController::class, 'upload'])->name('catalog.upload'); +Route::post('/catalog/upload', [App\Http\Controllers\CatalogController::class, 'processupload'])->name('catalog.processupload'); +Route::get('/catalog/thumb/{id}', [App\Http\Controllers\CatalogController::class, 'getthumbnail'])->name('catalog.getthumbnail'); +Route::get('/catalog/{type}', [App\Http\Controllers\CatalogController::class, 'index'])->name('catalog.index'); +Route::get('/catalog', function () { return redirect(route('catalog.index', 'hats')); }); +Route::post('/item/buy/{id}', [App\Http\Controllers\CatalogController::class, 'buyitem'])->name('catalog.buy'); +Route::get('/item/{id}', [App\Http\Controllers\CatalogController::class, 'item'])->name('catalog.item'); +Route::get('/item/{id}/configure', [App\Http\Controllers\CatalogController::class, 'configure'])->name('catalog.configure'); +Route::post('/item/{id}/configure', [App\Http\Controllers\CatalogController::class, 'processconfigure'])->name('catalog.processconfigure'); + +// Forum routes +Route::get('/forum', [App\Http\Controllers\ForumController::class, 'index'])->name('forum.index'); +Route::get('/forum/{id}', [App\Http\Controllers\ForumController::class, 'getcategory'])->name('forum.category'); +Route::get('/forum/thread/{id}', [App\Http\Controllers\ForumController::class, 'getthread'])->name('forum.getthread'); +Route::get('/forum/create/{id}', [App\Http\Controllers\ForumController::class, 'createthread'])->name('forum.createthread'); +Route::post('/forum/create/{id}', [App\Http\Controllers\ForumController::class, 'docreatethread'])->name('forum.docreatethread'); +Route::get('/forum/createreply/{id}', [App\Http\Controllers\ForumController::class, 'createreply'])->name('forum.createreply'); +Route::post('/forum/createreply/{id}', [App\Http\Controllers\ForumController::class, 'docreatereply'])->name('forum.docreatereply'); +Route::get('/forum/editthread/{id}', [App\Http\Controllers\ForumController::class, 'editthread'])->name('forum.editthread'); +Route::post('/forum/editthread/{id}', [App\Http\Controllers\ForumController::class, 'doeditthread'])->name('forum.doeditthread'); +Route::post('/forum/togglestickythread/{id}', [App\Http\Controllers\ForumController::class, 'togglestickythread'])->name('forum.togglesticky'); +Route::post('/forum/togglelock/{id}', [App\Http\Controllers\ForumController::class, 'togglelock'])->name('forum.togglelock'); +Route::post('/forum/deletethread/{id}', [App\Http\Controllers\ForumController::class, 'deletethread'])->name('forum.deletethread'); +Route::get('/forum/editreply/{id}', [App\Http\Controllers\ForumController::class, 'editreply'])->name('forum.editreply'); +Route::post('/forum/editreply/{id}', [App\Http\Controllers\ForumController::class, 'doeditreply'])->name('forum.doeditreply'); +Route::post('/forum/deletereply/{id}', [App\Http\Controllers\ForumController::class, 'deletereply'])->name('forum.deletereply'); + +// Admin routes +Route::get('/admin', [App\Http\Controllers\AdminController::class, 'index'])->name('admin.index'); +Route::get('/admin/truncategametokens', [App\Http\Controllers\AdminController::class, 'truncategametokens']); +Route::get('/admin/truncateservers', [App\Http\Controllers\AdminController::class, 'truncateservers']); +Route::get('/admin/invitekeys', [App\Http\Controllers\AdminController::class, 'invitekeys']); +Route::post('/admin/invitekeys/{id}/disable', [App\Http\Controllers\AdminController::class, 'disableinvitekey'])->name('admin.disableinvitekey'); +Route::get('/admin/createinvitekey', [App\Http\Controllers\AdminController::class, 'createinvitekey']); +Route::post('/admin/createinvitekey', [App\Http\Controllers\AdminController::class, 'generateinvitekey'])->name('admin.generateinvitekey'); +Route::get('/admin/ban', [App\Http\Controllers\AdminController::class, 'ban']); +Route::post('/admin/ban', [App\Http\Controllers\AdminController::class, 'banuser'])->name('admin.banuser'); +Route::get('/admin/unban', [App\Http\Controllers\AdminController::class, 'unban']); +Route::post('/admin/unban', [App\Http\Controllers\AdminController::class, 'unbanuser'])->name('admin.unbanuser'); +Route::get('/admin/newxmlitem', [App\Http\Controllers\AdminController::class, 'xmlitem']); +Route::post('/admin/newxmlitem', [App\Http\Controllers\AdminController::class, 'createxmlitem'])->name('admin.createxmlitem'); +Route::get('/admin/robloxitemdata/{id}', [App\Http\Controllers\AdminController::class, 'robloxitemdata']); +Route::get('/admin/robloxxmldata/{id}/{version}', [App\Http\Controllers\AdminController::class, 'robloxxmldata']); +Route::get('/admin/regenalluserthumbs', [App\Http\Controllers\AdminController::class, 'regenalluserthumbs']); + +// Thumbnail generator routes +Route::get('/thumbnail/getqueue', [App\Http\Controllers\RenderController::class, 'getQueue'])->name('thumbnails.getqueue'); +Route::post('/thumbnail/upload', [App\Http\Controllers\RenderController::class, 'upload'])->name('thumbnails.uploadthumbnail'); +Route::get('/thumbnail/clothingcharapp/{id}', [App\Http\Controllers\RenderController::class, 'getClothingCharApp'])->name('thumbnails.getclothingcharapp'); + +// Servers routes +Route::get('/servers', [App\Http\Controllers\ServersController::class, 'index'])->name('servers.index'); +Route::get('/server/{id}', [App\Http\Controllers\ServersController::class, 'server'])->name('servers.server'); +Route::get('/server/{id}/configure', [App\Http\Controllers\ServersController::class, 'configure'])->name('servers.configure'); +Route::post('/server/{id}/configure', [App\Http\Controllers\ServersController::class, 'processconfigure'])->name('servers.processconfigure'); +Route::post('/server/{id}/delete', [App\Http\Controllers\ServersController::class, 'delete'])->name('servers.delete'); +Route::get('/servers/create', function () { return view('servers.create'); }); +Route::post('/servers/create', [App\Http\Controllers\ServersController::class, 'create'])->name('servers.create'); + +// Launcher routes +Route::get('/client/versionstring', function () { return config('app.version_string'); }); +Route::get('/client/join/{token}', [App\Http\Controllers\ClientController::class, 'join'])->name('client.join'); +Route::get('/client/generate/{serverId}', [App\Http\Controllers\ClientController::class, 'generate'])->name('client.generate'); + +// Client routes +Route::get('/Asset/GetScriptState.ashx', function () { return '0 0 0 0'; }); // breaks script sig check in clients if removed +Route::get('/asset/GetScriptState.ashx', function () { return '0 0 0 0'; }); // breaks script sig check in clients if removed +Route::get('/Game/KeepAlivePinger.ashx', function () { return ''; }); +Route::get('/UploadMedia/PostImage.aspx', function () { return 'lol, this stupid person meant to screenshot using their normal screenshotting tool but instead triggered the old Roblox one'; }); +Route::get('/game/visit.ashx', function () { return view('client.playsolo'); }); +Route::get('/game/studio.ashx', function () { return view('client.studioscript'); }); +Route::get('/IDE/ClientToolbox.aspx', function () { return 'Toolbox not yet implemented!'; }); +Route::get('/IDE/Landing.aspx', function () { return view('client.landing'); }); +Route::get('/thumbs/avatar.ashx', [App\Http\Controllers\ClientController::class, 'getuserthumbnail'])->name('client.userthumbnail'); +Route::get('/server/host/{secret}', [App\Http\Controllers\ClientController::class, 'host'])->name('client.host'); +Route::get('/server/ping/{secret}', [App\Http\Controllers\ClientController::class, 'ping'])->name('client.ping'); +Route::get('/server/admin/{secret}', [App\Http\Controllers\ClientController::class, 'admin'])->name('client.admin'); +Route::get('/download', [App\Http\Controllers\UsersController::class, 'download'])->name('client.download'); +Route::get('/signscript', [App\Http\Controllers\ClientController::class, 'signscript'])->name('client.signscript'); + +// Asset routes +Route::get('/asset', [App\Http\Controllers\AssetController::class, 'getasset'])->name('asset.getasset'); +Route::get('/xmlasset', [App\Http\Controllers\AssetController::class, 'getxmlasset'])->name('asset.getxmlasset'); +Route::get('/Asset', [App\Http\Controllers\AssetController::class, 'robloxredirect'])->name('asset.robloxredirect'); + +// Character routes +Route::get('/character', [App\Http\Controllers\BodyColorsController::class, 'characterBodyColors'])->name('users.characterbodycolors'); +Route::post('/character/toggle/{id}', [App\Http\Controllers\UsersController::class, 'toggleWearing'])->name('users.togglewearing'); +Route::post('/character/setcolor', [App\Http\Controllers\BodyColorsController::class, 'changeBodyColor'])->name('users.setbodycolor'); +Route::post('/character/regen', [App\Http\Controllers\UsersController::class, 'regenThumbnail'])->name('users.regenthumbnail'); +Route::get('/character/{type}', [App\Http\Controllers\UsersController::class, 'characterItems'])->name('users.characteritems'); +Route::get('/users/{id}/bodycolors', [App\Http\Controllers\ClientController::class, 'bodycolors'])->name('users.bodycolors'); +Route::get('/users/{id}/character', [App\Http\Controllers\ClientController::class, 'charapp'])->name('users.getcharacter'); \ No newline at end of file diff --git a/server.php b/server.php new file mode 100644 index 0000000..5fb6379 --- /dev/null +++ b/server.php @@ -0,0 +1,21 @@ + + */ + +$uri = urldecode( + parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) +); + +// This file allows us to emulate Apache's "mod_rewrite" functionality from the +// built-in PHP web server. This provides a convenient way to test a Laravel +// application without having installed a "real" web server software here. +if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { + return false; +} + +require_once __DIR__.'/public/index.php'; diff --git a/storage/app/.gitignore b/storage/app/.gitignore new file mode 100644 index 0000000..8f4803c --- /dev/null +++ b/storage/app/.gitignore @@ -0,0 +1,3 @@ +* +!public/ +!.gitignore diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore new file mode 100644 index 0000000..7c240f7 --- /dev/null +++ b/storage/app/public/.gitignore @@ -0,0 +1,4 @@ +* +!.gitignore +!items +!users \ No newline at end of file diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore new file mode 100644 index 0000000..05c4471 --- /dev/null +++ b/storage/framework/.gitignore @@ -0,0 +1,9 @@ +compiled.php +config.php +down +events.scanned.php +maintenance.php +routes.php +routes.scanned.php +schedule-* +services.json diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore new file mode 100644 index 0000000..01e4a6c --- /dev/null +++ b/storage/framework/cache/.gitignore @@ -0,0 +1,3 @@ +* +!data/ +!.gitignore diff --git a/storage/framework/cache/data/.gitignore b/storage/framework/cache/data/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/cache/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/sessions/.gitignore b/storage/framework/sessions/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/sessions/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/testing/.gitignore b/storage/framework/testing/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/testing/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/views/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/logs/.gitignore b/storage/logs/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/logs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tadah-eleven.7z b/tadah-eleven.7z new file mode 100644 index 0000000..e42195f Binary files /dev/null and b/tadah-eleven.7z differ diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php new file mode 100644 index 0000000..547152f --- /dev/null +++ b/tests/CreatesApplication.php @@ -0,0 +1,22 @@ +make(Kernel::class)->bootstrap(); + + return $app; + } +} diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php new file mode 100644 index 0000000..4ae02bc --- /dev/null +++ b/tests/Feature/ExampleTest.php @@ -0,0 +1,21 @@ +get('/'); + + $response->assertStatus(200); + } +} diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100644 index 0000000..2932d4a --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } +} diff --git a/webpack.mix.js b/webpack.mix.js new file mode 100644 index 0000000..1a2a958 --- /dev/null +++ b/webpack.mix.js @@ -0,0 +1,16 @@ +const mix = require('laravel-mix'); + +/* + |-------------------------------------------------------------------------- + | Mix Asset Management + |-------------------------------------------------------------------------- + | + | Mix provides a clean, fluent API for defining some Webpack build steps + | for your Laravel application. By default, we are compiling the Sass + | file for the application as well as bundling up all the JS files. + | + */ + +mix.js('resources/js/app.js', 'public/js') + .sass('resources/sass/app.scss', 'public/css') + .sourceMaps();